コード例 #1
0
// flagbits: 0 = freeInterVariables, 1 = skipPlay
void Game::totSub(int8 flags, const char *newTotFile) {
	int8 curBackupPos;

	if ((flags == 16) || (flags == 17))
		warning("Urban Stub: Game::totSub(), flags == %d", flags);

	if (_numEnvironments >= Environments::kEnvironmentCount)
		return;

	_environments->set(_numEnvironments);

	curBackupPos = _curEnvironment;
	_numEnvironments++;
	_curEnvironment = _numEnvironments;

	_script = new Script(_vm);
	_resources = new Resources(_vm);

	if (flags & 0x80)
		warning("Urban Stub: Game::totSub(), flags & 0x80");

	if (flags & 1)
		_vm->_inter->_variables = 0;

	Common::strlcpy(_curTotFile, newTotFile, 10);
	strcat(_curTotFile, ".TOT");

	if (_vm->_inter->_terminate != 0) {
		clearUnusedEnvironment();
		return;
	}

	_hotspots->push(0, true);

	if (flags & 2)
		playTot(-1);
	else
		playTot(0);

	if (_vm->_inter->_terminate != 2)
		_vm->_inter->_terminate = 0;

	_hotspots->clear();
	_hotspots->pop();

	if ((flags & 1) && _vm->_inter->_variables) {
		_vm->_inter->delocateVars();
	}

	clearUnusedEnvironment();

	_numEnvironments--;
	_curEnvironment = curBackupPos;
	_environments->get(_numEnvironments);
}
コード例 #2
0
ファイル: game.cpp プロジェクト: Bundesdrucker/scummvm
void Game::start() {
	prepareStart();
	playTot(-2);

	_vm->_draw->closeScreen();

	for (int i = 0; i < Draw::kSpriteCount; i++)
		_vm->_draw->freeSprite(i);
	_vm->_draw->_scummvmCursor.reset();
}
コード例 #3
0
void Game::start() {
	prepareStart();
	playTot(-2);

	_vm->_draw->closeScreen();

	for (int i = 0; i < SPRITES_COUNT; i++)
		_vm->_draw->freeSprite(i);
	_vm->_draw->_scummvmCursor.reset();
}
コード例 #4
0
ファイル: game.cpp プロジェクト: Bundesdrucker/scummvm
void Game::switchTotSub(int16 index, int16 function) {
	int16 backupedCount;
	int16 curBackupPos;

	if ((_numEnvironments - index) < 1)
		return;

	int16 newPos = _curEnvironment - index - ((index >= 0) ? 1 : 0);
	if (newPos >= Environments::kEnvironmentCount)
		return;

	// WORKAROUND: Some versions don't make the MOVEMENT menu item unselectable
	// in the dreamland screen, resulting in a crash when it's clicked.
	if ((_vm->getGameType() == kGameTypeGob2) && (index == -1) && (function == 7) &&
	     _environments.getTotFile(newPos).equalsIgnoreCase("gob06.tot"))
		return;

	curBackupPos = _curEnvironment;
	backupedCount = _numEnvironments;
	if (_curEnvironment == _numEnvironments)
		_environments.set(_numEnvironments++);

	_curEnvironment -= index;
	if (index >= 0)
		_curEnvironment--;

	clearUnusedEnvironment();

	_environments.get(_curEnvironment);

	if (_vm->_inter->_terminate != 0) {
		clearUnusedEnvironment();
		return;
	}

	_hotspots->push(0, true);
	playTot(function);

	if (_vm->_inter->_terminate != 2)
		_vm->_inter->_terminate = 0;

	_hotspots->pop();

	clearUnusedEnvironment();

	_curEnvironment = curBackupPos;
	_numEnvironments = backupedCount;
	_environments.get(_curEnvironment);
}
コード例 #5
0
ファイル: game.cpp プロジェクト: Bundesdrucker/scummvm
// flagbits: 0 = freeInterVariables, 1 = function -1
void Game::totSub(int8 flags, const Common::String &totFile) {
	int8 curBackupPos;

	if ((flags == 16) || (flags == 17)) {
		// Prefetch tot data + delete prefetched data
		return;
	}

	if (_numEnvironments >= Environments::kEnvironmentCount)
		error("Game::totSub(): Environments overflow");

	_environments.set(_numEnvironments);

	if (flags == 18) {
		warning("Backuping media to %d", _numEnvironments);
		_environments.setMedia(_numEnvironments);
	}

	curBackupPos = _curEnvironment;
	_numEnvironments++;
	_curEnvironment = _numEnvironments;

	_script = new Script(_vm);
	_resources = new Resources(_vm);

	if (flags & 0x80)
		warning("Addy Stub: Game::totSub(), flags & 0x80");

	if (flags & 5)
		_vm->_inter->_variables = 0;

	_curTotFile = totFile + ".TOT";

	if (_vm->_inter->_terminate != 0) {
		clearUnusedEnvironment();
		return;
	}

	if (!(flags & 0x20))
		_hotspots->push(0, true);

	if ((flags == 18) || (flags & 0x06))
		playTot(-1);
	else
		playTot(0);

	if (_vm->_inter->_terminate != 2)
		_vm->_inter->_terminate = 0;

	if (!(flags & 0x20)) {
		_hotspots->clear();
		_hotspots->pop();
	}

	if ((flags & 5) && _vm->_inter->_variables)
		_vm->_inter->delocateVars();

	clearUnusedEnvironment();

	_numEnvironments--;
	_curEnvironment = curBackupPos;
	_environments.get(_numEnvironments);

	if (flags == 18) {
		warning("Restoring media from %d", _numEnvironments);
		_environments.getMedia(_numEnvironments);
	}

	_vm->_global->_inter_animDataSize = _script->getAnimDataSize();
}