diff options
Diffstat (limited to 'engines/hugo')
| -rw-r--r-- | engines/hugo/configure.engine | 3 | ||||
| -rw-r--r-- | engines/hugo/dialogs.cpp | 12 | ||||
| -rw-r--r-- | engines/hugo/display.cpp | 8 | ||||
| -rw-r--r-- | engines/hugo/file.cpp | 6 | ||||
| -rw-r--r-- | engines/hugo/hugo.cpp | 46 | ||||
| -rw-r--r-- | engines/hugo/hugo.h | 5 | ||||
| -rw-r--r-- | engines/hugo/intro.cpp | 4 | ||||
| -rw-r--r-- | engines/hugo/inventory.cpp | 4 | ||||
| -rw-r--r-- | engines/hugo/mouse.cpp | 6 | ||||
| -rw-r--r-- | engines/hugo/object.cpp | 42 | ||||
| -rw-r--r-- | engines/hugo/parser.cpp | 26 | ||||
| -rw-r--r-- | engines/hugo/route.cpp | 13 | ||||
| -rw-r--r-- | engines/hugo/route.h | 4 | ||||
| -rw-r--r-- | engines/hugo/schedule.cpp | 62 | ||||
| -rw-r--r-- | engines/hugo/sound.cpp | 5 | ||||
| -rw-r--r-- | engines/hugo/text.cpp | 31 | 
16 files changed, 183 insertions, 94 deletions
diff --git a/engines/hugo/configure.engine b/engines/hugo/configure.engine new file mode 100644 index 0000000000..9ab5c54e1e --- /dev/null +++ b/engines/hugo/configure.engine @@ -0,0 +1,3 @@ +# This file is included from the main "configure" script +# add_engine [name] [desc] [build-by-default] [subengines] [base games] [deps] +add_engine hugo "Hugo Trilogy" yes diff --git a/engines/hugo/dialogs.cpp b/engines/hugo/dialogs.cpp index 5dcee3ae94..23e04dc479 100644 --- a/engines/hugo/dialogs.cpp +++ b/engines/hugo/dialogs.cpp @@ -34,8 +34,10 @@  namespace Hugo { -TopMenu::TopMenu(HugoEngine *vm) : Dialog(0, 0, kMenuWidth, kMenuHeight), _arrayBmp(0), _arraySize(0), -	_vm(vm) { +TopMenu::TopMenu(HugoEngine *vm) : Dialog(0, 0, kMenuWidth, kMenuHeight), _vm(vm) { +	_arrayBmp = nullptr; +	_arraySize = 0; +  	init();  } @@ -140,12 +142,10 @@ void TopMenu::loadBmpArr(Common::SeekableReadStream &in) {  		_arrayBmp[i * 2] = bitmapSrc->convertTo(g_system->getOverlayFormat());  		_arrayBmp[i * 2 + 1] = new Graphics::Surface();  		_arrayBmp[i * 2 + 1]->create(_arrayBmp[i * 2]->w * 2, _arrayBmp[i * 2]->h * 2, g_system->getOverlayFormat()); -		byte *src = (byte *)_arrayBmp[i * 2]->getPixels(); -		byte *dst = (byte *)_arrayBmp[i * 2 + 1]->getPixels();  		for (int j = 0; j < _arrayBmp[i * 2]->h; j++) { -			src = (byte *)_arrayBmp[i * 2]->getBasePtr(0, j); -			dst = (byte *)_arrayBmp[i * 2 + 1]->getBasePtr(0, j * 2); +			byte *src = (byte *)_arrayBmp[i * 2]->getBasePtr(0, j); +			byte *dst = (byte *)_arrayBmp[i * 2 + 1]->getBasePtr(0, j * 2);  			for (int k = _arrayBmp[i * 2]->w; k > 0; k--) {  				for (int m = _arrayBmp[i * 2]->format.bytesPerPixel; m > 0; m--) {  					*dst++ = *src++; diff --git a/engines/hugo/display.cpp b/engines/hugo/display.cpp index fbe39b3a0c..3dc9c9a1c3 100644 --- a/engines/hugo/display.cpp +++ b/engines/hugo/display.cpp @@ -75,13 +75,13 @@ static const byte stdMouseCursor[] = {  Screen::Screen(HugoEngine *vm) : _vm(vm) { -	_mainPalette = 0; -	_curPalette = 0; +	_mainPalette = nullptr; +	_curPalette = nullptr;  	_dlAddIndex = 0;  	_dlRestoreIndex = 0;  	for (int i = 0; i < kNumFonts; i++) { -		_arrayFont[i] = 0; +		_arrayFont[i] = nullptr;  		fontLoadedFl[i] = false;  	}  	for (int i = 0; i < kBlitListSize; i++) { @@ -100,6 +100,8 @@ Screen::Screen(HugoEngine *vm) : _vm(vm) {  		_dlRestoreList[i]._dx = 0;  		_dlRestoreList[i]._dy = 0;  	} +	_fnt = 0; +	_paletteSize = 0;  }  Screen::~Screen() { diff --git a/engines/hugo/file.cpp b/engines/hugo/file.cpp index e58c2e57d6..aa128048af 100644 --- a/engines/hugo/file.cpp +++ b/engines/hugo/file.cpp @@ -246,13 +246,13 @@ SoundPtr FileManager::getSound(const int16 sound, uint16 *size) {  	// No more to do if SILENCE (called for cleanup purposes)  	if (sound == _vm->_soundSilence) -		return 0; +		return nullptr;  	// Open sounds file  	Common::File fp;                                // Handle to SOUND_FILE  	if (!fp.open(getSoundFilename())) {  		warning("Hugo Error: File not found %s", getSoundFilename()); -		return 0; +		return nullptr;  	}  	if (!_hasReadHeader) { @@ -519,6 +519,7 @@ void FileManager::readBootFile() {  	ofp.read(_vm->_boot._pbswitch, sizeof(_vm->_boot._pbswitch));  	ofp.read(_vm->_boot._distrib, sizeof(_vm->_boot._distrib));  	_vm->_boot._exitLen = ofp.readUint16LE(); +	ofp.close();  	byte *p = (byte *)&_vm->_boot; @@ -527,7 +528,6 @@ void FileManager::readBootFile() {  		checksum ^= p[i];  		p[i] ^= s_bootCypher[i % s_bootCypherLen];  	} -	ofp.close();  	if (checksum) {  		Utils::notifyBox(Common::String::format("Corrupted startup file '%s'", getBootFilename())); diff --git a/engines/hugo/hugo.cpp b/engines/hugo/hugo.cpp index b140cfdba2..88e2e4372b 100644 --- a/engines/hugo/hugo.cpp +++ b/engines/hugo/hugo.cpp @@ -46,11 +46,11 @@  namespace Hugo { -HugoEngine *HugoEngine::s_Engine = 0; +HugoEngine *HugoEngine::s_Engine = nullptr;  HugoEngine::HugoEngine(OSystem *syst, const HugoGameDescription *gd) : Engine(syst), _gameDescription(gd), -	_hero(0), _heroImage(0), _defltTunes(0), _numScreens(0), _tunesNbr(0), _soundSilence(0), _soundTest(0), -	_screenStates(0), _numStates(0), _score(0), _maxscore(0), _lastTime(0), _curTime(0), _episode(0) +	_hero(nullptr), _heroImage(0), _defltTunes(nullptr), _numScreens(0), _tunesNbr(0), _soundSilence(0), _soundTest(0), +	_screenStates(nullptr), _numStates(0), _score(0), _maxscore(0), _lastTime(0), _curTime(0), _episode(nullptr)  {  	_system = syst;  	DebugMan.addDebugChannel(kDebugSchedule, "Schedule", "Script Schedule debug level"); @@ -67,16 +67,16 @@ HugoEngine::HugoEngine(OSystem *syst, const HugoGameDescription *gd) : Engine(sy  	_console = new HugoConsole(this);  	_rnd = 0; -	_screen = NULL; -	_mouse = NULL; -	_inventory = NULL; -	_parser = NULL; -	_route = NULL; -	_sound = NULL; -	_intro = NULL; -	_object = NULL; -	_text = NULL; -	_topMenu = NULL; +	_screen = nullptr; +	_mouse = nullptr; +	_inventory = nullptr; +	_parser = nullptr; +	_route = nullptr; +	_sound = nullptr; +	_intro = nullptr; +	_object = nullptr; +	_text = nullptr; +	_topMenu = nullptr;  	_status._storyModeFl = false;  	_status._gameOverFl = false;  	_status._lookFl = false; @@ -93,6 +93,26 @@ HugoEngine::HugoEngine(OSystem *syst, const HugoGameDescription *gd) : Engine(sy  	_gameType = kGameTypeNone;  	_platform = Common::kPlatformUnknown;  	_packedFl = false; + +	_numVariant = 0; +	_gameVariant = kGameVariantNone; +	_normalTPS = 0; +	_screenPtr = nullptr; +	_config._musicFl = true; +	_config._soundFl = true; +	_config._turboFl = false; +	_look = 0; +	_take = 0; +	_drop = 0; +	_maze._enabledFl = false; +	_maze._size = 0; +	_maze._x1 = _maze._y1 = _maze._x2 = _maze._y2 = _maze._x3 = _maze._x4 = 0; +	_maze._firstScreenIndex = 0; +	_boot._checksum = 0; +	_boot._registered = kRegShareware; +	_boot._exitLen = 0; +	_file = nullptr; +	_scheduler = nullptr;  }  HugoEngine::~HugoEngine() { diff --git a/engines/hugo/hugo.h b/engines/hugo/hugo.h index 9f495a9037..6adb5f95d0 100644 --- a/engines/hugo/hugo.h +++ b/engines/hugo/hugo.h @@ -106,7 +106,8 @@ enum GameVariant {  	kGameVariantH3Win,  	kGameVariantH1Dos,  	kGameVariantH2Dos, -	kGameVariantH3Dos +	kGameVariantH3Dos, +	kGameVariantNone  };  enum HugoDebugChannels { @@ -259,7 +260,7 @@ public:  	// Used by the qsort function  	static HugoEngine &get() { -		assert(s_Engine != 0); +		assert(s_Engine != nullptr);  		return *s_Engine;  	} diff --git a/engines/hugo/intro.cpp b/engines/hugo/intro.cpp index 6f314c8774..5db6c39078 100644 --- a/engines/hugo/intro.cpp +++ b/engines/hugo/intro.cpp @@ -39,9 +39,10 @@  namespace Hugo { -IntroHandler::IntroHandler(HugoEngine *vm) : _vm(vm), _introX(0), _introY(0) { +IntroHandler::IntroHandler(HugoEngine *vm) : _vm(vm) {  	_introXSize = 0;  	_introTicks = 0; +	_introX = _introY = nullptr;  }  IntroHandler::~IntroHandler() { @@ -74,6 +75,7 @@ void IntroHandler::loadIntroData(Common::SeekableReadStream &in) {  void IntroHandler::freeIntroData() {  	free(_introX);  	free(_introY); +	_introX = _introY = nullptr;  }  intro_v1d::intro_v1d(HugoEngine *vm) : IntroHandler(vm) { diff --git a/engines/hugo/inventory.cpp b/engines/hugo/inventory.cpp index c2495beadb..03df997866 100644 --- a/engines/hugo/inventory.cpp +++ b/engines/hugo/inventory.cpp @@ -44,7 +44,8 @@ namespace Hugo {  static const int kMaxDisp = (kXPix / kInvDx);       // Max icons displayable -InventoryHandler::InventoryHandler(HugoEngine *vm) : _vm(vm), _invent(0) { +InventoryHandler::InventoryHandler(HugoEngine *vm) : _vm(vm) { +	_invent = nullptr;  	_firstIconId = 0;  	_inventoryState  = kInventoryOff;               // Inventory icon bar state  	_inventoryHeight = 0;                           // Inventory icon bar pos @@ -62,6 +63,7 @@ void InventoryHandler::setInventoryState(Istate state) {  void InventoryHandler::freeInvent() {  	free(_invent); +	_invent = nullptr;  }  int16 InventoryHandler::getInventoryObjId() const { diff --git a/engines/hugo/mouse.cpp b/engines/hugo/mouse.cpp index ae286c8afb..4ef3db3e2b 100644 --- a/engines/hugo/mouse.cpp +++ b/engines/hugo/mouse.cpp @@ -45,7 +45,8 @@  namespace Hugo { -MouseHandler::MouseHandler(HugoEngine *vm) : _vm(vm), _hotspots(0) { +MouseHandler::MouseHandler(HugoEngine *vm) : _vm(vm) { +	_hotspots = nullptr;  	_leftButtonFl  = false;  	_rightButtonFl = false;  	_jumpExitFl = false;                            // Can't jump to a screen exit @@ -83,6 +84,7 @@ void MouseHandler::setMouseY(int y) {  void MouseHandler::freeHotspots() {  	free(_hotspots); +	_hotspots = nullptr;  }  bool MouseHandler::getJumpExitFl() const { @@ -169,7 +171,7 @@ void MouseHandler::processRightClick(const int16 objId, const int16 cx, const in  			_vm->_object->useObject(objId);         // Use status.objid on object  	} else {                                        // Clicked over viewport object  		Object *obj = &_vm->_object->_objects[objId]; -		int16 x = 0, y = 0; +		int16 x, y;  		switch (obj->_viewx) {                       // Where to walk to  		case -1:                                    // Walk to object position  			if (_vm->_object->findObjectSpace(obj, &x, &y)) diff --git a/engines/hugo/object.cpp b/engines/hugo/object.cpp index 7b4783e4d8..44f46d2d79 100644 --- a/engines/hugo/object.cpp +++ b/engines/hugo/object.cpp @@ -44,7 +44,9 @@  namespace Hugo { -ObjectHandler::ObjectHandler(HugoEngine *vm) : _vm(vm), _objects(0), _uses(0) { +ObjectHandler::ObjectHandler(HugoEngine *vm) : _vm(vm) { +	_uses = nullptr; +	_objects = nullptr;  	_numObj = 0;  	_objCount = 0;  	_usesSize = 0; @@ -249,47 +251,49 @@ void ObjectHandler::lookObject(Object *obj) {  void ObjectHandler::freeObjects() {  	debugC(1, kDebugObject, "freeObjects"); -	if (_vm->_hero != 0 && _vm->_hero->_seqList[0]._seqPtr != 0) { +	if (_vm->_hero != nullptr && _vm->_hero->_seqList[0]._seqPtr != nullptr) {  		// Free all sequence lists and image data  		for (int16 i = 0; i < _numObj; i++) {  			Object *obj = &_objects[i];  			for (int16 j = 0; j < obj->_seqNumb; j++) {  				Seq *seq = obj->_seqList[j]._seqPtr;  				Seq *next; -				if (seq == 0) // Failure during database load +				if (seq == nullptr) // Failure during database load  					break; -				if (seq->_imagePtr != 0) { +				if (seq->_imagePtr != nullptr) {  					free(seq->_imagePtr); -					seq->_imagePtr = 0; +					seq->_imagePtr = nullptr;  				}  				seq = seq->_nextSeqPtr;  				while (seq != obj->_seqList[j]._seqPtr) { -					if (seq->_imagePtr != 0) { +					if (seq->_imagePtr != nullptr) {  						free(seq->_imagePtr); -						seq->_imagePtr = 0; +						seq->_imagePtr = nullptr;  					}  					next = seq->_nextSeqPtr;  					free(seq);  					seq = next;  				}  				free(seq); +				seq = nullptr;  			}  		}  	} -	if (_uses) { +	if (_uses != nullptr) {  		for (int16 i = 0; i < _usesSize; i++)  			free(_uses[i]._targets);  		free(_uses); +		_uses = nullptr;  	}  	for (int16 i = 0; i < _objCount; i++) {  		free(_objects[i]._stateDataIndex); -		_objects[i]._stateDataIndex = 0; +		_objects[i]._stateDataIndex = nullptr;  	}  	free(_objects); -	_objects = 0; +	_objects = nullptr;  }  /** @@ -358,7 +362,7 @@ void ObjectHandler::showTakeables() {   * Find a clear space around supplied object that hero can walk to   */  bool ObjectHandler::findObjectSpace(Object *obj, int16 *destx, int16 *desty) { -	debugC(1, kDebugObject, "findObjectSpace(obj, %d, %d)", *destx, *desty); +	debugC(1, kDebugObject, "findObjectSpace(...)");  	Seq *curImage = obj->_currImagePtr;  	int16 y = obj->_y + curImage->_y2 - 1; @@ -414,7 +418,7 @@ void ObjectHandler::readUse(Common::ReadStream &in, Uses &curUse) {   */  void ObjectHandler::loadObjectUses(Common::ReadStream &in) {  	Uses tmpUse; -	tmpUse._targets = 0; +	tmpUse._targets = nullptr;  	//Read _uses  	for (int varnt = 0; varnt < _vm->_numVariant; varnt++) { @@ -430,7 +434,7 @@ void ObjectHandler::loadObjectUses(Common::ReadStream &in) {  			else {  				readUse(in, tmpUse);  				free(tmpUse._targets); -				tmpUse._targets = 0; +				tmpUse._targets = nullptr;  			}  		}  	} @@ -442,7 +446,7 @@ void ObjectHandler::readObject(Common::ReadStream &in, Object &curObject) {  	uint16 numSubElem = in.readUint16BE();  	if (numSubElem == 0) -		curObject._stateDataIndex = 0; +		curObject._stateDataIndex = nullptr;  	else  		curObject._stateDataIndex = (uint16 *)malloc(sizeof(uint16) * numSubElem);  	for (int j = 0; j < numSubElem; j++) @@ -453,16 +457,16 @@ void ObjectHandler::readObject(Common::ReadStream &in, Object &curObject) {  	curObject._vyPath = in.readSint16BE();  	curObject._actIndex = in.readUint16BE();  	curObject._seqNumb = in.readByte(); -	curObject._currImagePtr = 0; +	curObject._currImagePtr = nullptr;  	if (curObject._seqNumb == 0) {  		curObject._seqList[0]._imageNbr = 0; -		curObject._seqList[0]._seqPtr = 0; +		curObject._seqList[0]._seqPtr = nullptr;  	}  	for (int j = 0; j < curObject._seqNumb; j++) {  		curObject._seqList[j]._imageNbr = in.readUint16BE(); -		curObject._seqList[j]._seqPtr = 0; +		curObject._seqList[j]._seqPtr = nullptr;  	}  	curObject._cycling = (Cycle)in.readByte(); @@ -498,7 +502,7 @@ void ObjectHandler::readObject(Common::ReadStream &in, Object &curObject) {  void ObjectHandler::loadObjectArr(Common::ReadStream &in) {  	debugC(6, kDebugObject, "loadObject(&in)");  	Object tmpObject; -	tmpObject._stateDataIndex = 0; +	tmpObject._stateDataIndex = nullptr;  	for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {  		uint16 numElem = in.readUint16BE(); @@ -515,7 +519,7 @@ void ObjectHandler::loadObjectArr(Common::ReadStream &in) {  				// Skip over uneeded objects.  				readObject(in, tmpObject);  				free(tmpObject._stateDataIndex); -				tmpObject._stateDataIndex = 0; +				tmpObject._stateDataIndex = nullptr;  			}  		}  	} diff --git a/engines/hugo/parser.cpp b/engines/hugo/parser.cpp index 2585c64fd8..57938ec371 100644 --- a/engines/hugo/parser.cpp +++ b/engines/hugo/parser.cpp @@ -44,14 +44,20 @@  namespace Hugo { -Parser::Parser(HugoEngine *vm) : _vm(vm), _putIndex(0), _getIndex(0), _arrayReqs(0), _catchallList(0), _backgroundObjects(0), _cmdList(0) { +Parser::Parser(HugoEngine *vm) : _vm(vm), _putIndex(0), _getIndex(0) { +	_catchallList = nullptr; +	_arrayReqs = nullptr; + +	_backgroundObjects = nullptr; +	_backgroundObjectsSize = 0; +	_cmdList = nullptr; +	_cmdListSize = 0; +  	_cmdLineIndex = 0;  	_cmdLineTick = 0;  	_cmdLineCursor = '_';  	_cmdLine[0] = '\0'; -	_cmdListSize = 0;  	_checkDoubleF1Fl = false; -	_backgroundObjectsSize = 0;  }  Parser::~Parser() { @@ -172,7 +178,7 @@ const char *Parser::useBG(const char *name) {  			return _vm->_text->getVerb(p[i]._verbIndex, 0);  	} -	return 0; +	return nullptr;  }  void Parser::freeParser() { @@ -180,20 +186,24 @@ void Parser::freeParser() {  		for (int i = 0; _arrayReqs[i] != 0; i++)  			free(_arrayReqs[i]);  		free(_arrayReqs); +		_arrayReqs = nullptr;  	}  	free(_catchallList); +	_catchallList = nullptr;  	if (_backgroundObjects) {  		for (int i = 0; i < _backgroundObjectsSize; i++)  			free(_backgroundObjects[i]);  		free(_backgroundObjects); +		_backgroundObjects = nullptr;  	}  	if (_cmdList) {  		for (int i = 0; i < _cmdListSize; i++)  			free(_cmdList[i]);  		free(_cmdList); +		_cmdList = nullptr;  	}  } @@ -398,9 +408,9 @@ void Parser::command(const char *format, ...) {   * Locate any member of object name list appearing in command line   */  bool Parser::isWordPresent(char **wordArr) const { -	debugC(1, kDebugParser, "isWordPresent(%s)", wordArr[0]); -  	if (wordArr != 0) { +		debugC(1, kDebugParser, "isWordPresent(%s)", wordArr[0]); +  		for (int i = 0; strlen(wordArr[i]); i++) {  			if (strstr(_vm->_line, wordArr[i]))  				return true; @@ -421,7 +431,7 @@ const char *Parser::findNoun() const {  				return _vm->_text->getNoun(i, 0);  		}  	} -	return 0; +	return nullptr;  }  /** @@ -436,7 +446,7 @@ const char *Parser::findVerb() const {  				return _vm->_text->getVerb(i, 0);  		}  	} -	return 0; +	return nullptr;  }  /** diff --git a/engines/hugo/route.cpp b/engines/hugo/route.cpp index 54dae88c28..dc3c41de9c 100644 --- a/engines/hugo/route.cpp +++ b/engines/hugo/route.cpp @@ -45,6 +45,17 @@ Route::Route(HugoEngine *vm) : _vm(vm) {  	_routeIndex       = -1;                         // Hero not following a route  	_routeType        = kRouteSpace;                // Hero walking to space  	_routeObjId       = -1;                         // Hero not walking to anything + +	for (int i = 0; i < kMaxSeg; i++) +		_segment[i]._y = _segment[i]._x1 = _segment[i]._x2 = 0; + +	_segmentNumb = 0; +	_routeListIndex = 0; +	_destX = _destY = 0; +	_heroWidth = 0; +	_routeFoundFl = false; +	_fullStackFl = false; +	_fullSegmentFl = false;  }  void Route::resetRoute() { @@ -303,7 +314,7 @@ Common::Point *Route::newNode() {  	_routeListIndex++;  	if (_routeListIndex >= kMaxNodes)               // Too many nodes -		return 0;                                   // Incomplete route - failure +		return nullptr;                             // Incomplete route - failure  	_route[_routeListIndex] = _route[_routeListIndex - 1];  // Initialize with previous node  	return &_route[_routeListIndex]; diff --git a/engines/hugo/route.h b/engines/hugo/route.h index 716829a201..71db1e2583 100644 --- a/engines/hugo/route.h +++ b/engines/hugo/route.h @@ -79,9 +79,11 @@ private:  	int16 _destY;  	int16 _heroWidth;                               // Hero width  	bool  _routeFoundFl;                            // TRUE when path found -	bool  _fullStackFl;                             // TRUE if stack exhausted  	bool  _fullSegmentFl;                           // Segments exhausted +	// CHECKME: Never set to true, could be removed +	bool  _fullStackFl;                             // TRUE if stack exhausted +  	void segment(int16 x, int16 y);  	bool findRoute(const int16 cx, const int16 cy);  	Common::Point *newNode(); diff --git a/engines/hugo/schedule.cpp b/engines/hugo/schedule.cpp index 32b8a47df7..17ffa9d391 100644 --- a/engines/hugo/schedule.cpp +++ b/engines/hugo/schedule.cpp @@ -47,10 +47,23 @@  namespace Hugo { -Scheduler::Scheduler(HugoEngine *vm) : _vm(vm), _actListArr(0), _curTick(0), _oldTime(0), _refreshTimeout(0), _points(0), _screenActs(0) { +Scheduler::Scheduler(HugoEngine *vm) : _vm(vm) { +	_actListArr = nullptr; +	_curTick = 0; +	_oldTime = 0; +	_refreshTimeout = 0; +	_points = nullptr; +	_screenActs = nullptr; +  	memset(_events, 0, sizeof(_events));  	_numBonuses = 0;  	_screenActsSize = 0; + +	_actListArrSize = 0; +	_alNewscrIndex = 0; +	_freeEvent = nullptr; +	_headEvent = nullptr; +	_tailEvent = nullptr;  }  Scheduler::~Scheduler() { @@ -69,14 +82,14 @@ void Scheduler::initEventQueue() {  	// Chain nextEvent from first to last  	for (int i = kMaxEvents; --i;)  		_events[i - 1]._nextEvent = &_events[i]; -	_events[kMaxEvents - 1]._nextEvent = 0; +	_events[kMaxEvents - 1]._nextEvent = nullptr;  	// Chain prevEvent from last to first  	for (int i = 1; i < kMaxEvents; i++)  		_events[i]._prevEvent = &_events[i - 1]; -	_events[0]._prevEvent = 0; +	_events[0]._prevEvent = nullptr; -	_headEvent = _tailEvent = 0;                    // Event list is empty +	_headEvent = _tailEvent = nullptr;              // Event list is empty  	_freeEvent = _events;                           // Free list is full  } @@ -90,7 +103,7 @@ Event *Scheduler::getQueue() {  		error("An error has occurred: %s", "getQueue");  	Event *resEvent = _freeEvent;  	_freeEvent = _freeEvent->_nextEvent; -	resEvent->_nextEvent = 0; +	resEvent->_nextEvent = nullptr;  	return resEvent;  } @@ -597,7 +610,7 @@ void Scheduler::loadScreenAct(Common::SeekableReadStream &in) {  			for (int i = 0; i < numElem; i++) {  				uint16 numSubElem = in.readUint16BE();  				if (numSubElem == 0) { -					_screenActs[i] = 0; +					_screenActs[i] = nullptr;  				} else {  					_screenActs[i] = (uint16 *)malloc(sizeof(uint16) * numSubElem);  					for (int j = 0; j < numSubElem; j++) @@ -617,11 +630,14 @@ void Scheduler::freeScheduler() {  	debugC(6, kDebugSchedule, "freeActListArr()");  	free(_points); +	_points = nullptr;  	if (_screenActs) {  		for (int i = 0; i < _screenActsSize; i++)  			free(_screenActs[i]);  		free(_screenActs); +		_screenActs = nullptr; +		_screenActsSize = 0;  	}  	if (_actListArr) { @@ -633,6 +649,8 @@ void Scheduler::freeScheduler() {  			free(_actListArr[i]);  		}  		free(_actListArr); +		_actListArr = nullptr; +		_actListArrSize = 0;  	}  } @@ -698,9 +716,9 @@ void Scheduler::saveEvents(Common::WriteStream *f) {  	f->writeUint32BE(getTicks()); -	int16 freeIndex = (_freeEvent == 0) ? -1 : _freeEvent - _events; -	int16 headIndex = (_headEvent == 0) ? -1 : _headEvent - _events; -	int16 tailIndex = (_tailEvent == 0) ? -1 : _tailEvent - _events; +	int16 freeIndex = (_freeEvent == nullptr) ? -1 : _freeEvent - _events; +	int16 headIndex = (_headEvent == nullptr) ? -1 : _headEvent - _events; +	int16 tailIndex = (_tailEvent == nullptr) ? -1 : _tailEvent - _events;  	f->writeSint16BE(freeIndex);  	f->writeSint16BE(headIndex); @@ -717,8 +735,8 @@ void Scheduler::saveEvents(Common::WriteStream *f) {  		f->writeSint16BE(subElem);  		f->writeByte((wrkEvent->_localActionFl) ? 1 : 0);  		f->writeUint32BE(wrkEvent->_time); -		f->writeSint16BE((wrkEvent->_prevEvent == 0) ? -1 : (wrkEvent->_prevEvent - _events)); -		f->writeSint16BE((wrkEvent->_nextEvent == 0) ? -1 : (wrkEvent->_nextEvent - _events)); +		f->writeSint16BE((wrkEvent->_prevEvent == nullptr) ? -1 : (wrkEvent->_prevEvent - _events)); +		f->writeSint16BE((wrkEvent->_nextEvent == nullptr) ? -1 : (wrkEvent->_nextEvent - _events));  	}  } @@ -1102,7 +1120,7 @@ void Scheduler::restoreEvents(Common::ReadStream *f) {  		// fix up action pointer (to do better)  		if ((index == -1) && (subElem == -1)) -			_events[i]._action = 0; +			_events[i]._action = nullptr;  		else  			_events[i]._action = (Act *)&_actListArr[index][subElem]; @@ -1112,12 +1130,12 @@ void Scheduler::restoreEvents(Common::ReadStream *f) {  		int16 prevIndex = f->readSint16BE();  		int16 nextIndex = f->readSint16BE(); -		_events[i]._prevEvent = (prevIndex == -1) ? (Event *)0 : &_events[prevIndex]; -		_events[i]._nextEvent = (nextIndex == -1) ? (Event *)0 : &_events[nextIndex]; +		_events[i]._prevEvent = (prevIndex == -1) ? nullptr : &_events[prevIndex]; +		_events[i]._nextEvent = (nextIndex == -1) ? nullptr : &_events[nextIndex];  	} -	_freeEvent = (freeIndex == -1) ? 0 : &_events[freeIndex]; -	_headEvent = (headIndex == -1) ? 0 : &_events[headIndex]; -	_tailEvent = (tailIndex == -1) ? 0 : &_events[tailIndex]; +	_freeEvent = (freeIndex == -1) ? nullptr : &_events[freeIndex]; +	_headEvent = (headIndex == -1) ? nullptr : &_events[headIndex]; +	_tailEvent = (tailIndex == -1) ? nullptr : &_events[tailIndex];  	// Adjust times to fit our time  	uint32 curTime = getTicks(); @@ -1156,7 +1174,7 @@ void Scheduler::insertAction(Act *action) {  	// Now find the place to insert the event  	if (!_tailEvent) {                                // Empty queue  		_tailEvent = _headEvent = curEvent; -		curEvent->_nextEvent = curEvent->_prevEvent = 0; +		curEvent->_nextEvent = curEvent->_prevEvent = nullptr;  	} else {  		Event *wrkEvent = _tailEvent;                   // Search from latest time back  		bool found = false; @@ -1178,7 +1196,7 @@ void Scheduler::insertAction(Act *action) {  		if (!found) {                                   // Must be earliest in list  			_headEvent->_prevEvent = curEvent;            // So insert as new head  			curEvent->_nextEvent = _headEvent; -			curEvent->_prevEvent = 0; +			curEvent->_prevEvent = nullptr;  			_headEvent = curEvent;  		}  	} @@ -1424,7 +1442,7 @@ Event *Scheduler::doAction(Event *curEvent) {  	}  	if (action->_a0._actType == NEW_SCREEN) {         // New_screen() deletes entire list -		return 0;                                       // nextEvent = 0 since list now empty +		return nullptr;                               // nextEvent = nullptr since list now empty  	} else {  		wrkEvent = curEvent->_nextEvent;  		delQueue(curEvent);                             // Return event to free list @@ -1455,9 +1473,9 @@ void Scheduler::delQueue(Event *curEvent) {  	}  	if (_headEvent) -		_headEvent->_prevEvent = 0;                     // Mark end of list +		_headEvent->_prevEvent = nullptr;             // Mark end of list  	else -		_tailEvent = 0;                                 // Empty queue +		_tailEvent = nullptr;                         // Empty queue  	curEvent->_nextEvent = _freeEvent;                // Return p to free list  	if (_freeEvent)                                   // Special case, if free list was empty diff --git a/engines/hugo/sound.cpp b/engines/hugo/sound.cpp index aefa03cd5e..28dcdc83d6 100644 --- a/engines/hugo/sound.cpp +++ b/engines/hugo/sound.cpp @@ -123,11 +123,12 @@ SoundHandler::SoundHandler(HugoEngine *vm) : _vm(vm) {  	_speakerStream = new Audio::PCSpeaker(_vm->_mixer->getOutputRate());  	_vm->_mixer->playStream(Audio::Mixer::kSFXSoundType, &_speakerHandle,  						_speakerStream, -1, Audio::Mixer::kMaxChannelVolume, 0, DisposeAfterUse::NO, true); -	_DOSSongPtr = 0; +	_DOSSongPtr = nullptr;  	_curPriority = 0;  	_pcspkrTimer = 0;  	_pcspkrOctave = 3;  	_pcspkrNoteDuration = 2; +	_DOSIntroSong = nullptr;  }  SoundHandler::~SoundHandler() { @@ -210,7 +211,7 @@ void SoundHandler::playSound(int16 sound, const byte priority) {  	_curPriority = priority;  	// Get sound data -	if ((soundPtr = _vm->_file->getSound(sound, &size)) == 0) +	if ((soundPtr = _vm->_file->getSound(sound, &size)) == nullptr)  		return;  	Audio::AudioStream *stream = Audio::makeRawStream(soundPtr, size, 11025, Audio::FLAG_UNSIGNED); diff --git a/engines/hugo/text.cpp b/engines/hugo/text.cpp index f8b02bdf68..538a0341e2 100644 --- a/engines/hugo/text.cpp +++ b/engines/hugo/text.cpp @@ -26,9 +26,17 @@  namespace Hugo { -TextHandler::TextHandler(HugoEngine *vm) : _vm(vm), _textData(0), _stringtData(0), -	_textEngine(0), _textIntro(0), _textMouse(0), _textParser(0), _textUtil(0), -	_screenNames(0), _arrayNouns(0), _arrayVerbs(0) { +TextHandler::TextHandler(HugoEngine *vm) : _vm(vm) { +	_textData = nullptr; +	_stringtData = nullptr; +	_textEngine = nullptr; +	_textIntro = nullptr; +	_textMouse = nullptr; +	_textParser = nullptr; +	_textUtil = nullptr; +	_screenNames = nullptr; +	_arrayNouns = nullptr; +	_arrayVerbs = nullptr;  }  TextHandler::~TextHandler() { @@ -86,9 +94,9 @@ char **TextHandler::loadTextsVariante(Common::ReadStream &in, uint16 *arraySize)  	int  numTexts;  	int  entryLen;  	int  len; -	char **res = 0; -	char *pos = 0; -	char *posBck = 0; +	char **res = nullptr; +	char *pos = nullptr; +	char *posBck = nullptr;  	for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {  		numTexts = in.readUint16BE(); @@ -126,21 +134,21 @@ char **TextHandler::loadTextsVariante(Common::ReadStream &in, uint16 *arraySize)  }  char ***TextHandler::loadTextsArray(Common::ReadStream &in) { -	char ***resArray = 0; +	char ***resArray = nullptr;  	uint16 arraySize;  	for (int varnt = 0; varnt < _vm->_numVariant; varnt++) {  		arraySize = in.readUint16BE();  		if (varnt == _vm->_gameVariant) {  			resArray = (char ***)malloc(sizeof(char **) * (arraySize + 1)); -			resArray[arraySize] = 0; +			resArray[arraySize] = nullptr;  		}  		for (int i = 0; i < arraySize; i++) {  			int numTexts = in.readUint16BE();  			int entryLen = in.readUint16BE();  			char *pos = (char *)malloc(entryLen); -			char *posBck = 0; -			char **res = 0; +			char *posBck = nullptr; +			char **res = nullptr;  			if (varnt == _vm->_gameVariant) {  				res = (char **)malloc(sizeof(char *) * numTexts);  				res[0] = pos; @@ -232,6 +240,7 @@ void TextHandler::freeTexts(char **ptr) {  	free(*ptr - DATAALIGNMENT);  	free(ptr); +	ptr = nullptr;  }  void TextHandler::freeAllTexts() { @@ -242,12 +251,14 @@ void TextHandler::freeAllTexts() {  		for (int i = 0; _arrayNouns[i]; i++)  			freeTexts(_arrayNouns[i]);  		free(_arrayNouns); +		_arrayNouns = nullptr;  	}  	if (_arrayVerbs) {  		for (int i = 0; _arrayVerbs[i]; i++)  			freeTexts(_arrayVerbs[i]);  		free(_arrayVerbs); +		_arrayVerbs = nullptr;  	}  	freeTexts(_screenNames);  | 
