diff options
| -rw-r--r-- | engines/lab/engine.cpp | 10 | ||||
| -rw-r--r-- | engines/lab/graphics.cpp | 4 | ||||
| -rw-r--r-- | engines/lab/intro.cpp | 2 | ||||
| -rw-r--r-- | engines/lab/lab.cpp | 9 | ||||
| -rw-r--r-- | engines/lab/lab.h | 3 | ||||
| -rw-r--r-- | engines/lab/labfun.h | 8 | ||||
| -rw-r--r-- | engines/lab/labsets.cpp | 5 | ||||
| -rw-r--r-- | engines/lab/map.cpp | 22 | ||||
| -rw-r--r-- | engines/lab/processroom.cpp | 14 | ||||
| -rw-r--r-- | engines/lab/resource.cpp | 4 | ||||
| -rw-r--r-- | engines/lab/resource.h | 5 | ||||
| -rw-r--r-- | engines/lab/special.cpp | 12 | 
12 files changed, 56 insertions, 42 deletions
| diff --git a/engines/lab/engine.cpp b/engines/lab/engine.cpp index e246d6d9be..d7561d1e8f 100644 --- a/engines/lab/engine.cpp +++ b/engines/lab/engine.cpp @@ -650,13 +650,13 @@ void LabEngine::mainGameLoop() {  	RoomNum = 1;  	Direction = NORTH; -	g_resource->readRoomData("LAB:Doors"); -	g_resource->readInventory("LAB:Inventor"); +	_resource->readRoomData("LAB:Doors"); +	_resource->readInventory("LAB:Inventor"); -	if (!(_conditions = new LargeSet(HighestCondition + 1))) +	if (!(_conditions = new LargeSet(HighestCondition + 1, this)))  		return; -	if (!(_roomsFound = new LargeSet(ManyRooms + 1))) +	if (!(_roomsFound = new LargeSet(ManyRooms + 1, this)))  		return;  	_conditions->readInitialConditions("LAB:Conditio"); @@ -1328,7 +1328,7 @@ void LabEngine::go() {  	if (!dointro)  		g_music->initMusic(); -	MsgFont = g_resource->getFont("P:AvanteG.12"); +	MsgFont = _resource->getFont("P:AvanteG.12");  	_event->mouseHide(); diff --git a/engines/lab/graphics.cpp b/engines/lab/graphics.cpp index 218f3c66d4..80d78edfbe 100644 --- a/engines/lab/graphics.cpp +++ b/engines/lab/graphics.cpp @@ -93,7 +93,7 @@ bool readPict(const char *filename, bool PlayOnce) {  /* Reads in a music file.  Ignores any graphics.                             */  /*****************************************************************************/  bool readMusic(const char *filename, bool waitTillFinished) { -	Common::File *file = g_resource->openDataFile(filename, MKTAG('D', 'I', 'F', 'F')); +	Common::File *file = g_lab->_resource->openDataFile(filename, MKTAG('D', 'I', 'F', 'F'));  	g_music->updateMusic();  	if (!g_music->_doNotFilestopSoundEffect)  		g_music->stopSoundEffect(); @@ -360,7 +360,7 @@ int32 LabEngine::longDrawMessage(const char *str) {  }  void LabEngine::drawStaticMessage(byte index) { -	drawMessage(g_resource->getStaticText((StaticText)index).c_str()); +	drawMessage(_resource->getStaticText((StaticText)index).c_str());  }  /******************************************************************************/ diff --git a/engines/lab/intro.cpp b/engines/lab/intro.cpp index 269922bbb3..7cbe48c044 100644 --- a/engines/lab/intro.cpp +++ b/engines/lab/intro.cpp @@ -347,7 +347,7 @@ void Intro::introSequence() {  	blackAllScreen();  	g_music->updateMusic(); -	_msgfont = g_resource->getFont("P:Map.fon"); +	_msgfont = g_lab->_resource->getFont("P:Map.fon");  	nopalchange = true;  	nReadPict("Intro.1", true); diff --git a/engines/lab/lab.cpp b/engines/lab/lab.cpp index b2e779f07e..3792f2b0d3 100644 --- a/engines/lab/lab.cpp +++ b/engines/lab/lab.cpp @@ -73,6 +73,10 @@ LabEngine::LabEngine(OSystem *syst, const ADGameDescription *gameDesc)      _nextKeyOut = 0;  	_isHiRes = false; + +	_event = nullptr; +	_resource = nullptr; +  	//const Common::FSNode gameDataDir(ConfMan.get("path"));  	//SearchMan.addSubDirectoryMatching(gameDataDir, "game");  	//SearchMan.addSubDirectoryMatching(gameDataDir, "game/pict"); @@ -83,6 +87,9 @@ LabEngine::LabEngine(OSystem *syst, const ADGameDescription *gameDesc)  LabEngine::~LabEngine() {  	// Remove all of our debug levels here  	DebugMan.clearAllDebugChannels(); + +	delete _event; +	delete _resource;  }  Common::Error LabEngine::run() { @@ -92,9 +99,9 @@ Common::Error LabEngine::run() {  		initGraphics(640, 480, true);  	_event = new EventManager(this); +	_resource = new Resource(this);  	g_music = new Music(); -	g_resource = new Resource();  	if (getPlatform() == Common::kPlatformWindows) {  		// Check if this is the Wyrmkeep trial diff --git a/engines/lab/lab.h b/engines/lab/lab.h index 8ead009fd7..7e7f645167 100644 --- a/engines/lab/lab.h +++ b/engines/lab/lab.h @@ -38,6 +38,7 @@  #include "lab/labfun.h"  #include "lab/interface.h"  #include "lab/mouse.h" +#include "lab/resource.h"  struct ADGameDescription; @@ -99,6 +100,8 @@ private:  public:  	EventManager *_event; +	Resource *_resource; +  	byte *_currentDsplayBuffer;  	Common::Point _mousePos; diff --git a/engines/lab/labfun.h b/engines/lab/labfun.h index f602d6007a..dd4796a2d0 100644 --- a/engines/lab/labfun.h +++ b/engines/lab/labfun.h @@ -47,6 +47,8 @@  namespace Lab { +class LabEngine; +  /* Direction defines */  #define NORTH   0  #define SOUTH   1 @@ -209,12 +211,16 @@ extern Music *g_music;  class LargeSet {  public: -    LargeSet(uint16 last); +    LargeSet(uint16 last, LabEngine *vm);      ~LargeSet();      bool in(uint16 element);      void inclElement(uint16 element);      void exclElement(uint16 element);      bool readInitialConditions(const char *fileName); + +private: +	LabEngine *_vm; +  public:      uint16 _lastElement;      uint16 *_array; diff --git a/engines/lab/labsets.cpp b/engines/lab/labsets.cpp index 4dcc0c8ebc..edd764668b 100644 --- a/engines/lab/labsets.cpp +++ b/engines/lab/labsets.cpp @@ -28,13 +28,14 @@   *   */ +#include "lab/lab.h"  #include "lab/stddefines.h"  #include "lab/labfun.h"  #include "lab/resource.h"  namespace Lab { -LargeSet::LargeSet(uint16 last) { +	LargeSet::LargeSet(uint16 last, LabEngine *vm) : _vm(vm) {  	last = (((last + 15) >> 4) << 4);  	_array = (uint16 *)calloc(last >> 3, 2); @@ -60,7 +61,7 @@ void LargeSet::exclElement(uint16 element) {  bool LargeSet::readInitialConditions(const char *fileName) {  	Common::File *file; -	if (file = g_resource->openDataFile(fileName, MKTAG('C', 'O', 'N', '0'))) { +	if (file = _vm->_resource->openDataFile(fileName, MKTAG('C', 'O', 'N', '0'))) {  		uint16 conditions = file->readUint16LE();  		for (int i = 0; i < conditions; i++) {  			inclElement(file->readUint16LE()); diff --git a/engines/lab/map.cpp b/engines/lab/map.cpp index e4b8b3258a..e4a6f04c74 100644 --- a/engines/lab/map.cpp +++ b/engines/lab/map.cpp @@ -196,7 +196,7 @@ static bool loadMapData() {  	BigMsgFont = &bmf; -	if (!(BigMsgFont = g_resource->getFont("P:Map.fon"))) +	if (!(BigMsgFont = g_lab->_resource->getFont("P:Map.fon")))  		BigMsgFont = MsgFont;  	resetBuffer();  /* Make images load into start of buffer */ @@ -249,7 +249,7 @@ static bool loadMapData() {  		counter++;  	} -	Common::File *mapFile = g_resource->openDataFile("Lab:Maps", MKTAG('M', 'A', 'P', '0')); +	Common::File *mapFile = g_lab->_resource->openDataFile("Lab:Maps", MKTAG('M', 'A', 'P', '0'));  	if (!mapFile)  		error("Corrupt map file");  	g_music->updateMusic(); @@ -611,31 +611,31 @@ void LabEngine::drawMap(uint16 CurRoom, uint16 CurMsg, uint16 Floor, bool fadeou  		if (onFloor(HEDGEMAZEFLOOR))  			drawImage(HugeMaze, mapScaleX(524), mapScaleY(97));  	} else if (Floor == SURMAZEFLOOR) { -		sptr = (char *)g_resource->getStaticText(kTextSurmazeMessage).c_str(); +		sptr = (char *)_resource->getStaticText(kTextSurmazeMessage).c_str();  		flowText(MsgFont, 0, 7, 0, true, true, true, true, mapScaleX(360), 0, mapScaleX(660), mapScaleY(450), sptr);  	}  	switch (Floor) {  	case LOWERFLOOR: -		sptr = (char *)g_resource->getStaticText(kTextLowerFloor).c_str(); +		sptr = (char *)_resource->getStaticText(kTextLowerFloor).c_str();  		break;  	case MIDDLEFLOOR: -		sptr = (char *)g_resource->getStaticText(kTextMiddleFloor).c_str(); +		sptr = (char *)_resource->getStaticText(kTextMiddleFloor).c_str();  		break;  	case UPPERFLOOR: -		sptr = (char *)g_resource->getStaticText(kTextUpperFloor).c_str(); +		sptr = (char *)_resource->getStaticText(kTextUpperFloor).c_str();  		break;  	case MEDMAZEFLOOR: -		sptr = (char *)g_resource->getStaticText(kTextMedMazeFloor).c_str(); +		sptr = (char *)_resource->getStaticText(kTextMedMazeFloor).c_str();  		break;  	case HEDGEMAZEFLOOR: -		sptr = (char *)g_resource->getStaticText(kTextHedgeMazeFloor).c_str(); +		sptr = (char *)_resource->getStaticText(kTextHedgeMazeFloor).c_str();  		break;  	case SURMAZEFLOOR: -		sptr = (char *)g_resource->getStaticText(kTextSurMazeFloor).c_str(); +		sptr = (char *)_resource->getStaticText(kTextSurMazeFloor).c_str();  		break;  	case CARNIVAL: -		sptr = (char *)g_resource->getStaticText(kTextCarnivalFloor).c_str(); +		sptr = (char *)_resource->getStaticText(kTextCarnivalFloor).c_str();  		break;  	default:  		sptr = NULL; @@ -795,7 +795,7 @@ void LabEngine::processMap(uint16 CurRoom) {  					if (OldMsg != CurMsg) {  						if (_rooms[CurMsg]._roomMsg == nullptr) -							g_resource->readViews(CurMsg); +							_resource->readViews(CurMsg);  						if ((sptr = _rooms[CurMsg]._roomMsg)) {  							_event->mouseHide(); diff --git a/engines/lab/processroom.cpp b/engines/lab/processroom.cpp index 1932d486d4..ef1a8011e1 100644 --- a/engines/lab/processroom.cpp +++ b/engines/lab/processroom.cpp @@ -96,7 +96,7 @@ ViewData *getViewData(uint16 roomNum, uint16 direction) {  	ViewData *view = NULL;  	if (!_rooms[roomNum]._roomMsg) -		g_resource->readViews(roomNum); +		g_lab->_resource->readViews(roomNum);  	if (direction == NORTH)  		view = _rooms[roomNum]._northView; @@ -202,13 +202,13 @@ void LabEngine::drawDirection(CloseDataPtr LCPtr) {  	}  	if (Direction == NORTH) -		message += g_resource->getStaticText(kTextFacingNorth); +		message += _resource->getStaticText(kTextFacingNorth);  	else if (Direction == EAST) -		message += g_resource->getStaticText(kTextFacingEast); +		message += _resource->getStaticText(kTextFacingEast);  	else if (Direction == SOUTH) -		message += g_resource->getStaticText(kTextFacingSouth); +		message += _resource->getStaticText(kTextFacingSouth);  	else if (Direction == WEST) -		message += g_resource->getStaticText(kTextFacingWest); +		message += _resource->getStaticText(kTextFacingWest);  	drawMessage(message.c_str());  } @@ -614,7 +614,7 @@ static bool doActionRuleSub(int16 action, int16 roomNum, CloseDataPtr LCPtr, Clo  		RuleList *rules = _rooms[RoomNum]._rules;  		if ((rules == NULL) && (roomNum == 0)) { -			g_resource->readViews(roomNum); +			g_lab->_resource->readViews(roomNum);  			rules = _rooms[roomNum]._rules;  		} @@ -671,7 +671,7 @@ static bool doOperateRuleSub(int16 ItemNum, int16 roomNum, CloseDataPtr LCPtr, C  			RuleList *rules = _rooms[roomNum]._rules;  			if ((rules == NULL) && (roomNum == 0)) { -				g_resource->readViews(roomNum); +				g_lab->_resource->readViews(roomNum);  				rules = _rooms[roomNum]._rules;  			} diff --git a/engines/lab/resource.cpp b/engines/lab/resource.cpp index 2f11515db2..5e6fe290df 100644 --- a/engines/lab/resource.cpp +++ b/engines/lab/resource.cpp @@ -39,9 +39,7 @@ extern RoomData *_rooms;  extern InventoryData *Inventory;  extern uint16 NumInv, ManyRooms, HighestCondition; -Resource *g_resource; - -Resource::Resource() { +Resource::Resource(LabEngine *vm) : _vm(vm) {  	readStaticText();  } diff --git a/engines/lab/resource.h b/engines/lab/resource.h index d41859e9f5..841aa09564 100644 --- a/engines/lab/resource.h +++ b/engines/lab/resource.h @@ -95,7 +95,7 @@ enum StaticText {  class Resource {  public: -	Resource(); +	Resource(LabEngine *vm);  	~Resource() {}  	Common::File *openDataFile(const char * fileName, uint32 fileHeader); @@ -106,6 +106,7 @@ public:  	Common::String getStaticText(byte index) const { return _staticText[index]; }  private: +	LabEngine *_vm;  	char *readString(Common::File *file);  	int16 *readConditions(Common::File *file);  	RuleList *readRule(Common::File *file); @@ -117,8 +118,6 @@ private:  	Common::String _staticText[48];  }; -extern Resource *g_resource; -  } // End of namespace Lab  #endif /* LAB_RESOURCE_H */ diff --git a/engines/lab/special.cpp b/engines/lab/special.cpp index 96f7bfd1ac..eaa9ef2755 100644 --- a/engines/lab/special.cpp +++ b/engines/lab/special.cpp @@ -461,7 +461,7 @@ void doNotes() {  	/* Load in the data */  	BigMsgFont = &bmfont; -	if (!(BigMsgFont = g_resource->getFont("P:Note.fon"))) { +	if (!(BigMsgFont = g_lab->_resource->getFont("P:Note.fon"))) {  		BigMsgFont = NULL;  		return;  	} @@ -487,7 +487,7 @@ void doWestPaper() {  	BigMsgFont = &bmfont; -	if (!(BigMsgFont = g_resource->getFont("P:News22.fon"))) { +	if (!(BigMsgFont = g_lab->_resource->getFont("P:News22.fon"))) {  		BigMsgFont = NULL;  		return;  	} @@ -499,7 +499,7 @@ void doWestPaper() {  	BigMsgFont = &bmfont; -	if (!(BigMsgFont = g_resource->getFont("P:News32.fon"))) { +	if (!(BigMsgFont = g_lab->_resource->getFont("P:News32.fon"))) {  		BigMsgFont = NULL;  		return;  	} @@ -518,7 +518,7 @@ void doWestPaper() {  	BigMsgFont = &bmfont; -	if (!(BigMsgFont = g_resource->getFont("P:Note.fon"))) { +	if (!(BigMsgFont = g_lab->_resource->getFont("P:Note.fon"))) {  		BigMsgFont = NULL;  		return;  	} @@ -548,7 +548,7 @@ static bool loadJournalData() {  	BigMsgFont = &bmfont; -	if (!(BigMsgFont = g_resource->getFont("P:Journal.fon"))) { +	if (!(BigMsgFont = g_lab->_resource->getFont("P:Journal.fon"))) {  		BigMsgFont = NULL;  		return false;  	} @@ -1047,7 +1047,7 @@ void LabEngine::doMonitor(char *background, char *textfile, bool isinteractive,  	BigMsgFont = &bmfont; -	if (!(BigMsgFont = g_resource->getFont("P:Map.fon"))) { +	if (!(BigMsgFont = _resource->getFont("P:Map.fon"))) {  		freeAllStolenMem();  		BigMsgFont = NULL;  		return; | 
