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)); } } } } }
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; }
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)); } } } } }