Esempio n. 1
0
void System::touch(uint16 mask, int x, int y, Common::KeyCode keyCode) {
	funTouch();

	if (mask & kEventKeyb) {
		if (keyCode == Common::KEYCODE_ESCAPE) {
			// The original was calling keyClick()
			// The sound is uselessly annoying and noisy, so it has been removed
			_vm->killText();
			if (_vm->_startupMode == 1) {
				_vm->_commandHandler->addCommand(kCmdClear, -1, 0, NULL);
				return;
			}
		}
	} else {
		if (_vm->_startupMode)
			return;
		int selectedScene = 0;
		_vm->_infoLine->update(NULL);
		if (y >= kWorldHeight ) {
			if (x < kButtonX) {                           // select scene?
				if (y >= kSceneY && y < kSceneY + kSceneNy * kSceneDy &&
				    x >= kSceneX && x < kSceneX + kSceneNx * kSceneDx && !_vm->_game) {
					selectedScene = ((y - kSceneY) / kSceneDy) * kSceneNx + (x - kSceneX) / kSceneDx + 1;
					if (selectedScene > _vm->_maxScene)
						selectedScene = 0;
				} else {
					selectedScene = 0;
				}
			} else if (mask & kMouseLeftUp) {
				if (y >= kPocketY && y < kPocketY + kPocketNY * kPocketDY &&
				    x >= kPocketX && x < kPocketX + kPocketNX * kPocketDX) {
					int n = ((y - kPocketY) / kPocketDY) * kPocketNX + (x - kPocketX) / kPocketDX;
					_vm->selectPocket(n);
				}
			}
		}

		_vm->postMiniStep(selectedScene - 1);

		if (mask & kMouseLeftUp) {
			if (selectedScene && _vm->_commandHandler->idle() && _vm->_hero->_tracePtr < 0)
				_vm->switchScene(selectedScene);

			if (_vm->_horzLine && !_vm->_horzLine->_flags._hide) {
				if (y >= kMapTop && y < kMapTop + kMapHig) {
					Cluster tmpCluster = _vm->XZ(x, y);
					int16 x1 = tmpCluster._pt.x;
					int16 z1 = tmpCluster._pt.y;
					_vm->_clusterMap[z1][x1] = 1;
					_vm->setMapBrick(x1, z1);
				}
			} else {
				if (!_vm->_talk && _vm->_commandHandler->idle() && _vm->_hero
				        && y >= kMapTop && y < kMapTop + kMapHig && !_vm->_game) {
					_vm->_hero->findWay(_vm->XZ(x, y));
				}
			}
		}
	}
}
Esempio n. 2
0
void System::tick() {
	if (!_vm->_startupMode)
		if (--_funDel == 0) {
			_vm->killText();
			if (_vm->_commandHandler->idle()) {
				if (_vm->_flag[0]) // Pain flag
					_vm->heroCover(9);
				else {
					int n = _vm->newRandom(100);
					if (n > 96)
						_vm->heroCover(6 + (_vm->_hero->_x + _vm->_hero->_w / 2 < kScrWidth / 2));
					else if (n > 90)
						_vm->heroCover(5);
					else if (n > 60)
						_vm->heroCover(4);
					else
						_vm->heroCover(3);
				}
			}
			funTouch();
		}
	_time = kSystemRate;
}
Esempio n. 3
0
void System::touch(uint16 mask, int x, int y) {
	funTouch();

	if (mask & kEventKeyb) {
		_vm->keyClick();
		_vm->killText();
		if (_vm->_startupMode == 1) {
			_vm->_commandHandler->addCommand(kCmdClear, -1, 0, NULL);
			return;
		}
		switch (x) {
		case 'X':
			if (_vm->_keyboard->_key[kKeyAlt])
				_vm->quit();
			break;
		case '0':
		case '1':
		case '2':
		case '3':
		case '4':
			if (_vm->_keyboard->_key[kKeyAlt]) {
				_vm->_commandHandler->addCommand(kCmdLevel, -1, x - '0', NULL);
				break;
			}
			break;
		}
	} else {
		if (_vm->_startupMode)
			return;
		int selectedScene = 0;
		_vm->_infoLine->update(NULL);
		if (y >= kWorldHeight ) {
			if (x < kButtonX) {                           // select scene?
				if (y >= kSceneY && y < kSceneY + kSceneNy * kSceneDy &&
				    x >= kSceneX && x < kSceneX + kSceneNx * kSceneDx && !_vm->_game) {
					selectedScene = ((y - kSceneY) / kSceneDy) * kSceneNx + (x - kSceneX) / kSceneDx + 1;
					if (selectedScene > _vm->_maxScene)
						selectedScene = 0;
				} else {
					selectedScene = 0;
				}
			} else if (mask & kMouseLeftUp) {
				if (y >= kPocketY && y < kPocketY + kPocketNY * kPocketDY &&
				    x >= kPocketX && x < kPocketX + kPocketNX * kPocketDX) {
					int n = ((y - kPocketY) / kPocketDY) * kPocketNX + (x - kPocketX) / kPocketDX;
					_vm->selectPocket(n);
				}
			}
		}

		_vm->postMiniStep(selectedScene - 1);

		if (mask & kMouseLeftUp) {
			if (selectedScene && _vm->_commandHandler->idle() && _vm->_hero->_tracePtr < 0)
				_vm->switchScene(selectedScene);

			if (_vm->_horzLine && !_vm->_horzLine->_flags._hide) {
				if (y >= kMapTop && y < kMapTop + kMapHig) {
					Cluster tmpCluster = _vm->XZ(x, y);
					int16 x1 = tmpCluster._pt.x;
					int16 z1 = tmpCluster._pt.y;
					_vm->_clusterMap[z1][x1] = 1;
					_vm->setMapBrick(x1, z1);
				}
			} else {
				if (!_vm->_talk && _vm->_commandHandler->idle() && _vm->_hero
				        && y >= kMapTop && y < kMapTop + kMapHig && !_vm->_game) {
					_vm->_hero->findWay(_vm->XZ(x, y));
				}
			}
		}
	}
}