diff options
Diffstat (limited to 'engines/agi/logic.cpp')
| -rw-r--r-- | engines/agi/logic.cpp | 52 | 
1 files changed, 26 insertions, 26 deletions
| diff --git a/engines/agi/logic.cpp b/engines/agi/logic.cpp index 7429b117c8..c6dd04b814 100644 --- a/engines/agi/logic.cpp +++ b/engines/agi/logic.cpp @@ -30,56 +30,57 @@ namespace Agi {   * into a message list.   * @param n  The number of the logic resource to decode.   */ -int AgiEngine::decodeLogic(int n) { +int AgiEngine::decodeLogic(int16 logicNr) {  	int ec = errOK;  	int mstart, mend, mc;  	uint8 *m0; +	AgiLogic *curLogic = &_game.logics[logicNr];  	// decrypt messages at end of logic + build message list  	// report ("decoding logic #%d\n", n); -	m0 = _game.logics[n].data; +	m0 = curLogic->data;  	mstart = READ_LE_UINT16(m0) + 2;  	mc = *(m0 + mstart);  	mend = READ_LE_UINT16(m0 + mstart + 1); -	m0 += mstart + 3;	// cover header info +	m0 += mstart + 3;   // cover header info  	mstart = mc << 1;  	// if the logic was not compressed, decrypt the text messages  	// only if there are more than 0 messages -	if ((~_game.dirLogic[n].flags & RES_COMPRESSED) && mc > 0) -		decrypt(m0 + mstart, mend - mstart);	// decrypt messages +	if ((~_game.dirLogic[logicNr].flags & RES_COMPRESSED) && mc > 0) +		decrypt(m0 + mstart, mend - mstart);    // decrypt messages  	// build message list -	m0 = _game.logics[n].data; -	mstart = READ_LE_UINT16(m0) + 2;	// +2 covers pointer -	_game.logics[n].numTexts = *(m0 + mstart); +	m0 = curLogic->data; +	mstart = READ_LE_UINT16(m0) + 2;    // +2 covers pointer +	_game.logics[logicNr].numTexts = *(m0 + mstart);  	// resetp logic pointers -	_game.logics[n].sIP = 2; -	_game.logics[n].cIP = 2; -	_game.logics[n].size = READ_LE_UINT16(m0) + 2;	// logic end pointer +	curLogic->sIP = 2; +	curLogic->cIP = 2; +	curLogic->size = READ_LE_UINT16(m0) + 2;    // logic end pointer  	// allocate list of pointers to point into our data -	_game.logics[n].texts = (const char **)calloc(1 + _game.logics[n].numTexts, sizeof(char *)); +	curLogic->texts = (const char **)calloc(1 + curLogic->numTexts, sizeof(char *));  	// cover header info  	m0 += mstart + 3; -	if (_game.logics[n].texts != NULL) { +	if (curLogic->texts != NULL) {  		// move list of strings into list to make real pointers -		for (mc = 0; mc < _game.logics[n].numTexts; mc++) { +		for (mc = 0; mc < curLogic->numTexts; mc++) {  			mend = READ_LE_UINT16(m0 + mc * 2); -			_game.logics[n].texts[mc] = mend ? (const char *)m0 + mend - 2 : (const char *)""; +			_game.logics[logicNr].texts[mc] = mend ? (const char *)m0 + mend - 2 : (const char *)"";  		}  		// set loaded flag now its all completly loaded -		_game.dirLogic[n].flags |= RES_LOADED; +		_game.dirLogic[logicNr].flags |= RES_LOADED;  	} else {  		// unload data  		// Note that not every logic has text -		free(_game.logics[n].data); +		free(curLogic->data);  		ec = errNotEnoughMemory;  	} @@ -92,18 +93,17 @@ int AgiEngine::decodeLogic(int n) {   * memory chunks allocated for this resource.   * @param n  The number of the logic resource to unload   */ -void AgiEngine::unloadLogic(int n) { -	if (_game.dirLogic[n].flags & RES_LOADED) { -		free(_game.logics[n].data); -		if (_game.logics[n].numTexts) -			free(_game.logics[n].texts); -		_game.logics[n].numTexts = 0; -		_game.dirLogic[n].flags &= ~RES_LOADED; +void AgiEngine::unloadLogic(int16 logicNr) { +	if (_game.dirLogic[logicNr].flags & RES_LOADED) { +		free(_game.logics[logicNr].data); +		free(_game.logics[logicNr].texts); +		_game.logics[logicNr].numTexts = 0; +		_game.dirLogic[logicNr].flags &= ~RES_LOADED;  	}  	// if cached, we end up here -	_game.logics[n].sIP = 2; -	_game.logics[n].cIP = 2; +	_game.logics[logicNr].sIP = 2; +	_game.logics[logicNr].cIP = 2;  }  } // End of namespace Agi | 
