diff options
| -rw-r--r-- | engines/mads/conversations.cpp | 393 | ||||
| -rw-r--r-- | engines/mads/conversations.h | 103 | ||||
| -rw-r--r-- | engines/mads/dragonsphere/dragonsphere_scenes1.cpp | 4 | ||||
| -rw-r--r-- | engines/mads/mads.cpp | 2 | ||||
| -rw-r--r-- | engines/mads/mads.h | 2 | ||||
| -rw-r--r-- | engines/mads/phantom/game_phantom.cpp | 2 | ||||
| -rw-r--r-- | engines/mads/phantom/phantom_scenes1.cpp | 26 | ||||
| -rw-r--r-- | engines/mads/phantom/phantom_scenes2.cpp | 26 | ||||
| -rw-r--r-- | engines/mads/phantom/phantom_scenes3.cpp | 2 | ||||
| -rw-r--r-- | engines/mads/phantom/phantom_scenes5.cpp | 22 | 
10 files changed, 323 insertions, 259 deletions
diff --git a/engines/mads/conversations.cpp b/engines/mads/conversations.cpp index 53b8e7900d..f51759dadf 100644 --- a/engines/mads/conversations.cpp +++ b/engines/mads/conversations.cpp @@ -28,187 +28,226 @@  namespace MADS { -#define MAX_SPEAKERS 5 - -enum DialogCommands { -	cmdNodeEnd = 0, -	// -	cmdHide = 2, -	cmdUnhide = 3, -	cmdMessage = 4, -	// -	// -	cmdGoto = 7, -	// -	cmdAssign = 9, -	cmdDialogEnd = 255 -}; - -struct ConvDialog { -	int16 textLineIndex;	// 0-based -	int16 speechIndex;		// 1-based -	uint16 nodeOffset;		// offset in section 6 -	uint16 nodeSize;		// size in section 6 -}; - -struct ConvNode { -	uint16 index; -	uint16 dialogCount; -	int16 unk1; -	int16 unk2; -	int16 unk3; - -	Common::Array<ConvDialog> dialogs; -}; - -struct ConvData { -	uint16 nodeCount;		// conversation nodes, each one containing several dialog options and messages -	uint16 dialogCount;		// messages (non-selectable) + texts (selectable) -	uint16 messageCount;	// messages (non-selectable) -	uint16 textLineCount; -	uint16 unk2; -	uint16 importCount; -	uint16 speakerCount; -	Common::String portraits[MAX_SPEAKERS]; -	bool speakerExists[MAX_SPEAKERS]; -	Common::String speechFile; -	Common::Array<Common::String> textLines; -	Common::Array<ConvNode> convNodes; -}; - -GameConversation::GameConversation(MADSEngine *vm) -	: _vm(vm) { -	_running = _restoreRunning = 0; +GameConversations::GameConversations(MADSEngine *vm) : _vm(vm) { +	_runningConv = nullptr; +	_restoreRunning = 0;  	_nextStartNode = nullptr; +	_playerEnabled = false; +	_startFrameNumber = 0; + +	// Mark all conversation slots as empty +	for (int idx = 0; idx < MAX_CONVERSATIONS; ++idx) +		_conversations[idx]._convId = -1;  } -GameConversation::~GameConversation() { +GameConversations::~GameConversations() {  } -void GameConversation::get(int id) { -	Common::File inFile; -	Common::String fileName = Common::String::format("CONV%03d.CNV", id); +void GameConversations::get(int id) { +	// Scan through the conversation list for a free slot +	int slotIndex = -1; +	for (int idx = 0; idx < MAX_CONVERSATIONS && slotIndex == -1; ++idx) { +		if (_conversations[idx]._convId == -1) +			slotIndex = idx; +	} +	if (slotIndex == -1) +		error("Too many conversations loaded"); + +	// Set the conversation the slot will contain +	_conversations[slotIndex]._convId = id; + +	// Load the conversation data +	Common::String cnvFilename = Common::String::format("CONV%03d.CNV", id); +	_conversations[slotIndex]._data.load(cnvFilename); +  	// TODO: Also handle the .CND file +} -	inFile.open(fileName); -	MadsPack convFileUnpacked(&inFile); -	Common::SeekableReadStream *convFile = convFileUnpacked.getItemStream(0); +ConversationEntry *GameConversations::getConv(int convId) { +	for (uint idx = 0; idx < MAX_CONVERSATIONS; ++idx) { +		if (_conversations[idx]._convId == convId) +			return &_conversations[idx]; +	} + +	return nullptr; +} + + +void GameConversations::run(int id) { +	// If another conversation is running, then stop it first +	if (_runningConv) +		stop(); + +	// Get the next conversation to run +	_runningConv = getConv(id); +	if (!_runningConv) +		error("Specified conversation %d not loaded", id); + +	// Initialize needed fields +	_startFrameNumber = _vm->_events->getFrameCounter(); +	_playerEnabled = _vm->_game->_player._stepEnabled; +	//TODO + +	// Start the conversation +	start(); + +	warning("TODO GameConversations::run"); +} + +void GameConversations::start() { + +	warning("TODO: GameConversations::start"); +} + +void GameConversations::stop() { +	warning("TODO GameConversations::stop"); +} + +void GameConversations::exportPointer(int *val) { +	warning("TODO GameConversations::exportPointer"); +} + +void GameConversations::exportValue(int val) { +	warning("TODO GameConversations::exportValue"); +} + +void GameConversations::setHeroTrigger(int val) { +	_vm->_game->_trigger = val;	// HACK +	//_running = -1;	// HACK +	warning("TODO: GameConversations::setHeroTrigger"); +} + +void GameConversations::setInterlocutorTrigger(int val) { +	warning("TODO: GameConversations::setInterlocutorTrigger"); +} + +int* GameConversations::getVariable(int idx) { +	warning("TODO: GameConversations::getVariable"); +	return nullptr; +} + +void GameConversations::hold() { +	warning("TODO: GameConversations::hold"); +} + +void GameConversations::release() { +	warning("TODO: GameConversations::release"); +} + +void GameConversations::reset(int id) { +	warning("TODO: GameConversations::reset"); +} + +void GameConversations::abortConv() { +	warning("TODO: GameConversations::abort"); +} +/*------------------------------------------------------------------------*/ + +void ConversationData::load(const Common::String &filename) { +	Common::File inFile;  	char buffer[16]; -	ConvData conv; +	inFile.open(filename); +	MadsPack convFileUnpacked(&inFile); +	Common::SeekableReadStream *convFile = convFileUnpacked.getItemStream(0);  	// **** Section 0: Header ************************************************* -	conv.nodeCount = convFile->readUint16LE(); -	conv.dialogCount = convFile->readUint16LE(); -	conv.messageCount = convFile->readUint16LE(); -	conv.textLineCount = convFile->readUint16LE(); -	conv.unk2 = convFile->readUint16LE(); -	conv.importCount = convFile->readUint16LE(); -	conv.speakerCount = convFile->readUint16LE(); - -	//debug("Conv %d has %d nodes, %d dialogs, %d messages, %d text lines, %d unk2, %d imports and %d speakers", -	//		id, conv.nodeCount, conv.dialogCount, conv.messageCount, conv.textLineCount, conv.unk2, conv.importCount, conv.speakerCount); - -	for (uint16 i = 0; i < MAX_SPEAKERS; i++) { +	_nodeCount = convFile->readUint16LE(); +	_dialogCount = convFile->readUint16LE(); +	_messageCount = convFile->readUint16LE(); +	_textLineCount = convFile->readUint16LE(); +	_unk2 = convFile->readUint16LE(); +	_importCount = convFile->readUint16LE(); +	_speakerCount = convFile->readUint16LE(); + +	for (uint idx = 0; idx < MAX_SPEAKERS; ++idx) {  		convFile->read(buffer, 16); -		conv.portraits[i] = buffer; -		//debug("Speaker %d, portrait %s", i, conv.portraits[i].c_str()); +		_portraits[idx] = buffer;  	} -	for (uint16 i = 0; i < MAX_SPEAKERS; i++) { -		conv.speakerExists[i] = convFile->readUint16LE(); -		//debug("Speaker %d exists: %d", i, conv.speakerExists[i]); +	for (uint idx = 0; idx < MAX_SPEAKERS; ++idx) { +		_speakerExists[idx] = convFile->readUint16LE();  	}  	convFile->read(buffer, 14); -	conv.speechFile = Common::String(buffer); -	//debug("Speech file %s", conv.speechFile.c_str()); - -	uint16 textLength = convFile->readUint16LE();	// Total text length in section 5 -	convFile->skip(2);	// TODO: unknown -	uint16 commandLength = convFile->readUint16LE();	// Total length of commands in section 6 -	//debug("Node entry commands length: %d", commandLength); - -#if 0 -	debug("Section 0 unknown bytes"); -	byte *tmp0 = new byte[26]; -	convFile->read(tmp0, 26); -	Common::hexdump(tmp0, 26); -	delete[] tmp0; +	_speechFile = Common::String(buffer); + +	// Total text length in section 5 +	_textSize = convFile->readUint32LE(); +	_commandsSize = convFile->readUint32LE(); + +	// The rest of the section 0 is padding to allow room for a set of pointers +	// to the contents of the remaining sections loaded into memory as a +	// continuous data block containing both the header and the sections  	delete convFile; -#else -	warning("Section 0 unknown bytes"); -#endif +  	// **** Section 1: Nodes **************************************************  	convFile = convFileUnpacked.getItemStream(1); -	for (uint16 i = 0; i < conv.nodeCount; i++) { +	_convNodes.clear(); +	for (uint i = 0; i < _nodeCount; i++) {  		ConvNode node; -		node.index = convFile->readUint16LE(); -		node.dialogCount = convFile->readUint16LE(); -		node.unk1 = convFile->readSint16LE();	// TODO -		node.unk2 = convFile->readSint16LE();	// TODO -		node.unk3 = convFile->readSint16LE();	// TODO -		conv.convNodes.push_back(node); +		node._index = convFile->readUint16LE(); +		node._dialogCount = convFile->readUint16LE(); +		node._unk1 = convFile->readSint16LE();	// TODO +		node._unk2 = convFile->readSint16LE();	// TODO +		node._unk3 = convFile->readSint16LE();	// TODO +		_convNodes.push_back(node);  		//debug("Node %d, index %d, entries %d - %d, %d, %d", i, node.index, node.dialogCount, node.unk1, node.unk2, node.unk3);  	}  	delete convFile;  	// **** Section 2: Dialogs ************************************************  	convFile = convFileUnpacked.getItemStream(2); -	assert(convFile->size() == conv.dialogCount * 8); +	assert(convFile->size() == _dialogCount * 8); -	for (uint16 i = 0; i < conv.nodeCount; i++) { -		uint16 dialogCount = conv.convNodes[i].dialogCount; +	for (uint idx = 0; idx < _nodeCount; ++idx) { +		uint dialogCount = _convNodes[idx]._dialogCount; -		for (uint16 j = 0; j < dialogCount; j++) { +		for (uint j = 0; j < dialogCount; ++j) {  			ConvDialog dialog; -			dialog.textLineIndex = convFile->readSint16LE(); -			dialog.speechIndex = convFile->readSint16LE(); -			dialog.nodeOffset = convFile->readUint16LE(); -			dialog.nodeSize = convFile->readUint16LE(); -			conv.convNodes[i].dialogs.push_back(dialog); -			//debug("Node %d, dialog %d: text line %d, speech index %d, node offset %d, node size %d", j, i, dialog.textLineIndex, dialog.speechIndex, dialog.nodeOffset, dialog.nodeSize); +			dialog._textLineIndex = convFile->readSint16LE(); +			dialog._speechIndex = convFile->readSint16LE(); +			dialog._nodeOffset = convFile->readUint16LE(); +			dialog._nodeSize = convFile->readUint16LE(); +			_convNodes[idx]._dialogs.push_back(dialog);  		}  	}  	delete convFile; -	// **** Section 3: ???? *************************************************** -#if 0 -	debug("Section 3"); +	// **** Section 3: Messages ***********************************************  	convFile = convFileUnpacked.getItemStream(3); -	byte *tmp1 = new byte[convFile->size()]; -	convFile->read(tmp1, convFile->size()); -	Common::hexdump(tmp1, convFile->size()); -	delete[] tmp1; +	assert(convFile->size() == _messageCount * 8); + +	_messages.resize(_messageCount); +	for (uint idx = 0; idx < _messageCount; ++idx) +		_messages[idx] = convFile->readUint32LE(); +  	delete convFile; -#else -	warning("Section 3 - TODO"); -#endif +  	// **** Section 4: Text line offsets **************************************  	convFile = convFileUnpacked.getItemStream(4); -	assert(convFile->size() == conv.textLineCount * 2); +	assert(convFile->size() == _textLineCount * 2); -	uint16 *textLineOffsets = new uint16[conv.textLineCount];	// deleted below in section 5 -	for (uint16 i = 0; i < conv.textLineCount; i++) +	uint16 *textLineOffsets = new uint16[_textLineCount];	// deleted below in section 5 +	for (uint16 i = 0; i < _textLineCount; i++)  		textLineOffsets[i] = convFile->readUint16LE();  	delete convFile;  	// **** Section 5: Text lines *********************************************  	convFile = convFileUnpacked.getItemStream(5); -	assert(convFile->size() == textLength); +	assert(convFile->size() == _textSize);  	Common::String textLine; -	conv.textLines.resize(conv.textLineCount); +	_textLines.resize(_textLineCount);  	char textLineBuffer[256];  	uint16 nextOffset; -	for (uint16 i = 0; i < conv.textLineCount; i++) { -		nextOffset = (i != conv.textLineCount - 1) ? textLineOffsets[i + 1] : convFile->size(); +	for (uint16 i = 0; i < _textLineCount; i++) { +		nextOffset = (i != _textLineCount - 1) ? textLineOffsets[i + 1] : convFile->size();  		convFile->read(textLineBuffer, nextOffset - textLineOffsets[i]); -		conv.textLines[i] = Common::String(textLineBuffer);	 -		//debug("Text line %d: %s", i, conv.textLines[i].c_str()); +		_textLines[i] = Common::String(textLineBuffer);  	}  	delete[] textLineOffsets; @@ -216,13 +255,13 @@ void GameConversation::get(int id) {  	// **** Section 6: Node entry commands ************************************  	convFile = convFileUnpacked.getItemStream(6); -	assert(convFile->size() == commandLength); +	assert(convFile->size() == _commandsSize); -	for (uint16 i = 0; i < conv.nodeCount; i++) { -		uint16 dialogCount = conv.convNodes[i].dialogCount; +	for (uint16 i = 0; i < _nodeCount; i++) { +		uint16 dialogCount = _convNodes[i]._dialogCount;  		for (uint16 j = 0; j < dialogCount; j++) { -			//ConvDialog dialog = conv.convNodes[i].dialogs[j]; +			//ConvDialog dialog = _convNodes[i].dialogs[j];  			byte command;  			uint16 chk; @@ -248,8 +287,8 @@ void GameConversation::get(int id) {  						//debug("Hide node %d", nodeRef);  					} -					} -					break; +				} +							  break;  				case cmdUnhide: {  					byte count = convFile->readByte();  					for (byte k = 0; k < count; k++) { @@ -257,8 +296,8 @@ void GameConversation::get(int id) {  						//debug("Unhide node %d", nodeRef);  					} -					} -					break; +				} +								break;  				case cmdMessage:  					//debug("Message");  					convFile->skip(7);	// TODO @@ -267,15 +306,15 @@ void GameConversation::get(int id) {  					convFile->skip(3);	// unused?  					/*byte nodeRef = */convFile->readByte();  					//debug("Goto %d", nodeRef); -					} -					break; +				} +							  break;  				case cmdAssign: {  					convFile->skip(3);	// unused?  					/*uint16 value = */convFile->readUint16LE();  					/*uint16 variable = */convFile->readUint16LE();  					//debug("Variable %d = %d", variable, value); -					} -					break; +				} +								break;  				default:  					error("Unknown conversation command %d", command);  					break; @@ -287,76 +326,8 @@ void GameConversation::get(int id) {  	delete convFile;  	inFile.close(); -	/* -	// DEBUG: Show the very first message, and play the very first speech -	_vm->_audio->setSoundGroup(conv.speechFile); -	uint16 firstText = 0, firstSpeech = 1; - -	for (uint16 i = 0; i < conv.convNodes.size(); i++) { -		for (uint16 k = 0; k < conv.convNodes[i].dialogs.size(); k++) { -			if (conv.convNodes[i].dialogs[k].textLineIndex >= 0) { -				firstText = conv.convNodes[i].dialogs[k].textLineIndex; -				firstSpeech = conv.convNodes[i].dialogs[k].speechIndex; -				break; -			} -		} -	} - -	_vm->_audio->playSound(firstSpeech - 1); - -	TextDialog *dialog = new TextDialog(_vm, FONT_INTERFACE, Common::Point(0, 100), 30); -	dialog->addLine(conv.textLines[firstText]); -	dialog->show(); -	delete dialog; -	*/ - -	warning("TODO GameConversation::get"); -} - -void GameConversation::run(int id) { -	warning("TODO GameConversation::run"); -} - -void GameConversation::stop() { -	warning("TODO GameConversation::stop"); -} - -void GameConversation::exportPointer(int *val) { -	warning("TODO GameConversation::exportPointer"); -} - -void GameConversation::exportValue(int val) { -	warning("TODO GameConversation::exportValue"); -} - -void GameConversation::setHeroTrigger(int val) { -	_vm->_game->_trigger = val;	// HACK -	_running = -1;	// HACK -	warning("TODO: GameConversation::setHeroTrigger"); +	// TODO: Still stuff to do +	warning("TODO GameConversations::get");  } -void GameConversation::setInterlocutorTrigger(int val) { -	warning("TODO: GameConversation::setInterlocutorTrigger"); -} - -int* GameConversation::getVariable(int idx) { -	warning("TODO: GameConversation::getVariable"); -	return nullptr; -} - -void GameConversation::hold() { -	warning("TODO: GameConversation::hold"); -} - -void GameConversation::release() { -	warning("TODO: GameConversation::release"); -} - -void GameConversation::reset(int id) { -	warning("TODO: GameConversation::reset"); -} - -void GameConversation::abortConv() { -	warning("TODO: GameConversation::abort"); -}  } // End of namespace MADS diff --git a/engines/mads/conversations.h b/engines/mads/conversations.h index c4bf06e6dc..2a2a6258df 100644 --- a/engines/mads/conversations.h +++ b/engines/mads/conversations.h @@ -23,24 +23,110 @@  #ifndef MADS_CONVERSATIONS_H  #define MADS_CONVERSATIONS_H +#include "common/scummsys.h" +#include "common/array.h" +#include "common/str-array.h" +  namespace MADS { +#define MAX_CONVERSATIONS 5 +#define MAX_SPEAKERS 5 + +enum DialogCommands { +	cmdNodeEnd = 0, +	// +	cmdHide = 2, +	cmdUnhide = 3, +	cmdMessage = 4, +	// +	// +	cmdGoto = 7, +	// +	cmdAssign = 9, +	cmdDialogEnd = 255 +}; + +struct ConvDialog { +	int16 _textLineIndex;	// 0-based +	int16 _speechIndex;		// 1-based +	uint16 _nodeOffset;		// offset in section 6 +	uint16 _nodeSize;		// size in section 6 +}; + +struct ConvNode { +	uint16 _index; +	uint16 _dialogCount; +	int16 _unk1; +	int16 _unk2; +	int16 _unk3; + +	Common::Array<ConvDialog> _dialogs; +}; + +struct ConversationData { +	uint16 _nodeCount;		// conversation nodes, each one containing several dialog options and messages +	uint16 _dialogCount;		// messages (non-selectable) + texts (selectable) +	uint16 _messageCount;	// messages (non-selectable) +	uint16 _textLineCount; +	uint16 _unk2; +	uint16 _importCount; +	uint16 _speakerCount; +	int _textSize; +	int _commandsSize; + +	Common::String _portraits[MAX_SPEAKERS]; +	bool _speakerExists[MAX_SPEAKERS]; +	Common::String _speechFile; +	Common::Array<uint> _messages; +	Common::StringArray _textLines; +	Common::Array<ConvNode> _convNodes; + +	/** +	 * Load the specified conversation resource file +	 */ +	void load(const Common::String &filename); +}; + +struct ConversationData2 { +}; + +struct ConversationEntry { +	int _convId; +	ConversationData _data; +	ConversationData2 _data2; +}; +  class MADSEngine; -class GameConversation { +class GameConversations {  private:  	MADSEngine *_vm; +	ConversationEntry _conversations[MAX_CONVERSATIONS]; + +	/** +	 * Returns the record for the specified conversation, if it's loaded +	 */ +	ConversationEntry *getConv(int convId); +	/** +	 * Start a specified conversation slot +	 */ +	void start(); +public: +	ConversationEntry *_runningConv; +	int _restoreRunning; +	bool _playerEnabled; +	uint32 _startFrameNumber;  public:  	/**  	 * Constructor  	 */ -	GameConversation(MADSEngine *vm); +	GameConversations(MADSEngine *vm);  	/**  	 * Destructor  	 */ -	virtual ~GameConversation(); +	virtual ~GameConversations();  	int* _nextStartNode;  	int* getVariable(int idx); @@ -56,9 +142,16 @@ public:  	void release();  	void reset(int id);  	void abortConv(); +	 +	/** +	 * Returns true if any conversation is currently atcive +	 */ +	bool active() const { return _runningConv != nullptr; } -	int _running; -	int _restoreRunning; +	/** +	 * Returns the currently active conversation Id +	 */ +	int activeConvId() const { return !active() ? -1 : _runningConv->_convId; }  };  } // End of namespace MADS diff --git a/engines/mads/dragonsphere/dragonsphere_scenes1.cpp b/engines/mads/dragonsphere/dragonsphere_scenes1.cpp index 8a89d8ed08..7fdea7137c 100644 --- a/engines/mads/dragonsphere/dragonsphere_scenes1.cpp +++ b/engines/mads/dragonsphere/dragonsphere_scenes1.cpp @@ -1486,7 +1486,7 @@ void Scene104::step() {  }  void Scene104::actions() { -	if (_vm->_gameConv->_running == 1) { +	if (_vm->_gameConv->activeConvId() == 1) {  		handleFinalConversation();  		_action._inProgress = false;  		return; @@ -3341,7 +3341,7 @@ void Scene105::actions() {  		return;  	} -	if (_vm->_gameConv->_running == 2) { +	if (_vm->_gameConv->activeConvId() == 2) {  		handleConversation();  		_action._inProgress = false;  		return; diff --git a/engines/mads/mads.cpp b/engines/mads/mads.cpp index 0bdf484c9a..963a35c24c 100644 --- a/engines/mads/mads.cpp +++ b/engines/mads/mads.cpp @@ -104,7 +104,7 @@ void MADSEngine::initialize() {  		_gameConv = nullptr;  		break;  	default: -		_gameConv = new GameConversation(this); +		_gameConv = new GameConversations(this);  	}  	loadOptions(); diff --git a/engines/mads/mads.h b/engines/mads/mads.h index 1b0f96a656..eb808de32f 100644 --- a/engines/mads/mads.h +++ b/engines/mads/mads.h @@ -97,7 +97,7 @@ public:  	EventsManager *_events;  	Font *_font;  	Game *_game; -	GameConversation * _gameConv; +	GameConversations * _gameConv;  	Palette *_palette;  	Resources *_resources;  	ScreenSurface _screen; diff --git a/engines/mads/phantom/game_phantom.cpp b/engines/mads/phantom/game_phantom.cpp index 3ec3052ad5..af9769d529 100644 --- a/engines/mads/phantom/game_phantom.cpp +++ b/engines/mads/phantom/game_phantom.cpp @@ -744,7 +744,7 @@ void GamePhantom::stopWalker() {  void GamePhantom::step() {  	if (_player._visible  && !_globals[kStopWalkerDisabled] -	 && (_player._stepEnabled || (_vm->_gameConv->_running >= 0)) +	 && (_player._stepEnabled || (_vm->_gameConv->activeConvId() >= 0))  	 && !_player._moving && (_player._facing == _player._turnToFacing)  	 && (_scene._frameStartTime >= (uint32)_globals[kWalkerTiming])) {  		if (_player._stopWalkers.empty()) diff --git a/engines/mads/phantom/phantom_scenes1.cpp b/engines/mads/phantom/phantom_scenes1.cpp index c86d2852c7..bfd60daec7 100644 --- a/engines/mads/phantom/phantom_scenes1.cpp +++ b/engines/mads/phantom/phantom_scenes1.cpp @@ -300,9 +300,9 @@ void Scene101::preActions() {  }  void Scene101::actions() { -	if (_vm->_gameConv->_running == 0) +	if (_vm->_gameConv->activeConvId() == 0)  		handleConversation0(); -	else if (_vm->_gameConv->_running == 1) +	else if (_vm->_gameConv->activeConvId() == 1)  		handleConversation1();  	else if (_action._lookFlag) {  		if (_globals[kCurrentYear] == 1993) @@ -525,7 +525,7 @@ void Scene101::handleAnimation1() {  		}  		if (_startWalkingFl) { -			if (_vm->_gameConv->_running == 1) { +			if (_vm->_gameConv->activeConvId() == 1) {  				if (_talkCounter > 13)  					_chandelierStatus = 1;  			} else @@ -541,7 +541,7 @@ void Scene101::handleAnimation1() {  		case 1:  			_globals[kBrieTalkStatus] = 2;  			resetFrame = 45; -			if (_vm->_gameConv->_running == 1) +			if (_vm->_gameConv->activeConvId() == 1)  				_vm->_gameConv->stop();  			_scene->_dynamicHotspots.remove(_brieAnimId);  			_game._player._stepEnabled = false; @@ -1376,7 +1376,7 @@ void Scene103::actions() {  		return;  	} -	if (_vm->_gameConv->_running == 12) { +	if (_vm->_gameConv->activeConvId() == 12) {  		process_conv_jacques();  		_action._inProgress = false;  		return; @@ -2678,7 +2678,7 @@ void Scene104::preActions() {  }  void Scene104::actions() { -	if (_vm->_gameConv->_running == 7) { +	if (_vm->_gameConv->activeConvId() == 7) {  		processConversations();  		_action._inProgress = false;  		return; @@ -5076,7 +5076,7 @@ void Scene108::enter() {  		_globals._animationIndexes[0] = _scene->loadAnimation(formAnimName('c', 1), 1);  		_anim0ActvFl = true; -		if (_vm->_gameConv->_running == 2) { +		if (_vm->_gameConv->activeConvId() == 2) {  			_globals[kWalkerConverse] = _vm->getRandomNumber(1, 4);  			_charAction = 0;  			_vm->_gameConv->run(2); @@ -5133,7 +5133,7 @@ void Scene108::step() {  }  void Scene108::actions() { -	if (_vm->_gameConv->_running == 2) { +	if (_vm->_gameConv->activeConvId() == 2) {  		handleCharlesConversation();  		_action._inProgress = false;  		return; @@ -6641,7 +6641,7 @@ void Scene111::step() {  }  void Scene111::actions() { -	if (_vm->_gameConv->_running == 14) { +	if (_vm->_gameConv->activeConvId() == 14) {  		handleListenConversation();  		_action._inProgress = false;  		return; @@ -7081,7 +7081,7 @@ void Scene112::step() {  }  void Scene112::actions() { -	if (_vm->_gameConv->_running == 3) { +	if (_vm->_gameConv->activeConvId() == 3) {  		handleConversation();  		_action._inProgress = false;  		return; @@ -8081,19 +8081,19 @@ void Scene113::step() {  }  void Scene113::actions() { -	if (_vm->_gameConv->_running == 13) { +	if (_vm->_gameConv->activeConvId() == 13) {  		handleLoveConversation();  		_action._inProgress = false;  		return;  	} -	if (_vm->_gameConv->_running == 4) { +	if (_vm->_gameConv->activeConvId() == 4) {  		handleFlorentConversation();  		_action._inProgress = false;  		return;  	} -	if (_vm->_gameConv->_running == 6) { +	if (_vm->_gameConv->activeConvId() == 6) {  		handleDeadConversation();  		_action._inProgress = false;  		return; diff --git a/engines/mads/phantom/phantom_scenes2.cpp b/engines/mads/phantom/phantom_scenes2.cpp index eff0bf8db9..02e2d7c117 100644 --- a/engines/mads/phantom/phantom_scenes2.cpp +++ b/engines/mads/phantom/phantom_scenes2.cpp @@ -156,14 +156,14 @@ void Scene201::step() {  	if (_anim1ActvFl)  		handleSellerAnimation(); -	if ((_needHoldFl) && (_vm->_gameConv->_running != 16)) { +	if ((_needHoldFl) && (_vm->_gameConv->activeConvId() != 16)) {  		_game._player._stepEnabled = false;  		_needHoldFl = false;  	}  }  void Scene201::actions() { -	if (_vm->_gameConv->_running == 16) { +	if (_vm->_gameConv->activeConvId() == 16) {  		handleConversation();  		_action._inProgress = false;  		return; @@ -786,13 +786,13 @@ void Scene202::step() {  }  void Scene202::actions() { -	if (_vm->_gameConv->_running == 17) { +	if (_vm->_gameConv->activeConvId() == 17) {  		handleConversation1();  		_action._inProgress = false;  		return;  	} -	if (_vm->_gameConv->_running == 9) { +	if (_vm->_gameConv->activeConvId() == 9) {  		handleConversation2();  		_action._inProgress = false;  		return; @@ -1725,7 +1725,7 @@ void Scene203::step() {  		_vm->_sound->command(25);  		_globals._sequenceIndexes[5] = _scene->_sequences.addStampCycle(_globals._spriteIndexes[5], false, -1);  		_scene->_sequences.setDepth(_globals._sequenceIndexes[5], 14); -		if (_vm->_gameConv->_running != 15) +		if (_vm->_gameConv->activeConvId() != 15)  			_game._player._stepEnabled = true;  		break; @@ -1735,19 +1735,19 @@ void Scene203::step() {  }  void Scene203::actions() { -	if (_vm->_gameConv->_running == 5) { +	if (_vm->_gameConv->activeConvId() == 5) {  		handleBrieConversation();  		_action._inProgress = false;  		return;  	} -	if (_vm->_gameConv->_running == 8) { +	if (_vm->_gameConv->activeConvId() == 8) {  		handleRichardConversation();  		_action._inProgress = false;  		return;  	} -	if (_vm->_gameConv->_running == 15) { +	if (_vm->_gameConv->activeConvId() == 15) {  		handleRichardAndDaaeConversation();  		_action._inProgress = false;  		return; @@ -3481,7 +3481,7 @@ void Scene204::step() {  	if (_game._trigger == 85)  		_scene->_nextSceneId = 250; -	if ((_vm->_gameConv->_running != 22) && !_skip1Fl && _endGameFl) { +	if ((_vm->_gameConv->activeConvId() != 22) && !_skip1Fl && _endGameFl) {  		_game._player._stepEnabled = false;  		_skip1Fl = true;  	} @@ -3500,7 +3500,7 @@ void Scene204::step() {  }  void Scene204::actions() { -	if (_vm->_gameConv->_running == 22) { +	if (_vm->_gameConv->activeConvId() == 22) {  		handleConversation();  		_action._inProgress = false; @@ -4525,19 +4525,19 @@ void Scene205::step() {  }  void Scene205::actions() { -	if (_vm->_gameConv->_running == 18) { +	if (_vm->_gameConv->activeConvId() == 18) {  		handleConversation18();  		_action._inProgress = false;  		return;  	} -	if (_vm->_gameConv->_running == 10) { +	if (_vm->_gameConv->activeConvId() == 10) {  		handleConversation10();  		_action._inProgress = false;  		return;  	} -	if (_vm->_gameConv->_running == 11) { +	if (_vm->_gameConv->activeConvId() == 11) {  		handleConversation11();  		_action._inProgress = false;  		return; diff --git a/engines/mads/phantom/phantom_scenes3.cpp b/engines/mads/phantom/phantom_scenes3.cpp index bb9bcee80c..3527a794b4 100644 --- a/engines/mads/phantom/phantom_scenes3.cpp +++ b/engines/mads/phantom/phantom_scenes3.cpp @@ -1070,7 +1070,7 @@ void Scene304::step() {  }  void Scene304::actions() { -	if (_vm->_gameConv->_running == 23) { +	if (_vm->_gameConv->activeConvId() == 23) {  		handleConversation23();  		_action._inProgress = false;  		return; diff --git a/engines/mads/phantom/phantom_scenes5.cpp b/engines/mads/phantom/phantom_scenes5.cpp index 2daaed9a90..406637eac4 100644 --- a/engines/mads/phantom/phantom_scenes5.cpp +++ b/engines/mads/phantom/phantom_scenes5.cpp @@ -257,7 +257,7 @@ void Scene501::step() {  }  void Scene501::actions() { -	if (_vm->_gameConv->_running == 26) { +	if (_vm->_gameConv->activeConvId() == 26) {  		_action._inProgress = false;  		return;  	} @@ -620,7 +620,7 @@ void Scene501::preActions() {  			break;  		case 1: -			if (_vm->_gameConv->_running >= 0) +			if (_vm->_gameConv->activeConvId() >= 0)  				_scene->_sequences.addTimer(6, 1);  			else {  				_game._player._stepEnabled = true; @@ -2263,7 +2263,7 @@ void Scene504::step() {  }  void Scene504::actions() { -	if (_vm->_gameConv->_running == 26) { +	if (_vm->_gameConv->activeConvId() == 26) {  		_action._inProgress = false;  		return;  	} @@ -2304,19 +2304,19 @@ void Scene504::actions() {  		return;  	} -	if (_vm->_gameConv->_running == 19) { +	if (_vm->_gameConv->activeConvId() == 19) {  		handleListenConversation();  		_action._inProgress = false;  		return;  	} -	if (_vm->_gameConv->_running == 27) { +	if (_vm->_gameConv->activeConvId() == 27) {  		handlePlayConversation();  		_action._inProgress = false;  		return;  	} -	if (_vm->_gameConv->_running == 21) { +	if (_vm->_gameConv->activeConvId() == 21) {  		handleFightConversation();  		_action._inProgress = false;  		return; @@ -2360,7 +2360,7 @@ void Scene504::actions() {  	if (_action.isAction(VERB_WALK_THROUGH, NOUN_RIGHT_DOOR) || _action.isAction(VERB_OPEN, NOUN_RIGHT_DOOR)) {  		if (_globals[kRightDoorIsOpen504]) { -			if (_vm->_gameConv->_running == 26) +			if (_vm->_gameConv->activeConvId() == 26)  				_vm->_gameConv->abortConv();  			_scene->_nextSceneId = 505; @@ -2580,7 +2580,7 @@ void Scene504::preActions() {  					break;  				case 1: -					if (_vm->_gameConv->_running >= 0) +					if (_vm->_gameConv->activeConvId() >= 0)  						_scene->_sequences.addTimer(6, 1);  					else {  						_game._player._stepEnabled = true; @@ -3314,7 +3314,7 @@ void Scene505::actions() {  		return;  	} -	if (_vm->_gameConv->_running == 20) { +	if (_vm->_gameConv->activeConvId() == 20) {  		handleCoffinDialog();  		_action._inProgress = false;  		return; @@ -4077,7 +4077,7 @@ void Scene506::step() {  			_scene->_nextSceneId = 501;  	} -	if (_ascendingFl && (_vm->_gameConv->_running != 26)) { +	if (_ascendingFl && (_vm->_gameConv->activeConvId() != 26)) {  		_ascendingFl = false;  		_game._player._stepEnabled = false;  	} @@ -4205,7 +4205,7 @@ void Scene506::actions() {  		return;  	} -	if (_vm->_gameConv->_running == 26) { +	if (_vm->_gameConv->activeConvId() == 26) {  		_action._inProgress = false;  		return;  	}  | 
