int GUI_HoF::changeLanguage(Button *caller) { updateMenuButton(caller); ++_vm->_lang; _vm->_lang %= 3; setupOptionsButtons(); renewHighlight(_gameOptions); return 0; }
int GUI_HoF::gameOptionsTalkie(Button *caller) { updateMenuButton(caller); restorePage1(_vm->_screenBuffer); backUpPage1(_vm->_screenBuffer); bool textEnabled = _vm->textEnabled(); int lang = _vm->_lang; setupOptionsButtons(); initMenu(_gameOptions); _isOptionsMenu = true; while (_isOptionsMenu) { processHighlights(_gameOptions); getInput(); } restorePage1(_vm->_screenBuffer); backUpPage1(_vm->_screenBuffer); if (textEnabled && !_vm->textEnabled() && !_vm->speechEnabled()) { _vm->_configVoice = 1; _vm->setVolume(KyraEngine_v1::kVolumeSpeech, 75); choiceDialog(0x1E, 0); } if (_vm->_lang != lang) { _reloadTemporarySave = true; Graphics::Surface thumb; createScreenThumbnail(thumb); _vm->saveGameStateIntern(999, "Autosave", &thumb); thumb.free(); _vm->_lastAutosave = _vm->_system->getMillis(); _vm->loadCCodeBuffer("C_CODE.XXX"); if (_vm->_flags.isTalkie) _vm->loadOptionsBuffer("OPTIONS.XXX"); else _vm->_optionsBuffer = _vm->_cCodeBuffer; _vm->loadChapterBuffer(_vm->_newChapterFile); _vm->loadNPCScript(); _vm->setupLangButtonShapes(); } _vm->writeSettings(); initMenu(*_currentMenu); updateAllMenuButtons(); return 0; }
int GUI_HoF::audioOptions(Button *caller) { updateMenuButton(caller); restorePage1(_vm->_screenBuffer); backUpPage1(_vm->_screenBuffer); initMenu(_audioOptions); const int menuX = _audioOptions.x; const int menuY = _audioOptions.y; const int maxButton = 3; // 2 if voc is disabled for (int i = 0; i < maxButton; ++i) { int x = menuX + _sliderBarsPosition[i*2+0]; int y = menuY + _sliderBarsPosition[i*2+1]; _screen->drawShape(0, _vm->_buttonShapes[16], x, y, 0, 0); drawSliderBar(i, _vm->_buttonShapes[17]); _sliderButtons[0][i].buttonCallback = _sliderHandlerFunctor; _sliderButtons[0][i].x = x; _sliderButtons[0][i].y = y; _menuButtonList = addButtonToList(_menuButtonList, &_sliderButtons[0][i]); _sliderButtons[2][i].buttonCallback = _sliderHandlerFunctor; _sliderButtons[2][i].x = x + 10; _sliderButtons[2][i].y = y; _menuButtonList = addButtonToList(_menuButtonList, &_sliderButtons[2][i]); _sliderButtons[1][i].buttonCallback = _sliderHandlerFunctor; _sliderButtons[1][i].x = x + 120; _sliderButtons[1][i].y = y; _menuButtonList = addButtonToList(_menuButtonList, &_sliderButtons[1][i]); } _isOptionsMenu = true; updateAllMenuButtons(); bool speechEnabled = _vm->speechEnabled(); while (_isOptionsMenu) { processHighlights(_audioOptions); getInput(); } restorePage1(_vm->_screenBuffer); backUpPage1(_vm->_screenBuffer); if (speechEnabled && !_vm->textEnabled() && (!_vm->speechEnabled() || _vm->getVolume(KyraEngine_v1::kVolumeSpeech) == 2)) { _vm->_configVoice = 0; choiceDialog(0x1D, 0); } _vm->writeSettings(); initMenu(*_currentMenu); updateAllMenuButtons(); return 0; }
int GUI_HoF::quitGame(Button *caller) { updateMenuButton(caller); if (choiceDialog(_vm->gameFlags().isTalkie ? 0xF : 0x17, 1)) { _displayMenu = false; _vm->_runFlag = false; _vm->_sound->beginFadeOut(); _screen->fadeToBlack(); _screen->clearCurPage(); } if (_vm->_runFlag) { initMenu(*_currentMenu); updateAllMenuButtons(); } return 0; }
int GUI_HoF::loadMenu(Button *caller) { updateSaveFileList(_vm->_targetName); if (!_vm->_menuDirectlyToLoad) { updateMenuButton(caller); restorePage1(_vm->_screenBuffer); backUpPage1(_vm->_screenBuffer); } _savegameOffset = 0; setupSavegameNames(_loadMenu, 5); initMenu(_loadMenu); _isLoadMenu = true; _noLoadProcess = false; _vm->_gameToLoad = -1; updateAllMenuButtons(); _screen->updateScreen(); while (_isLoadMenu) { processHighlights(_loadMenu); getInput(); } if (_noLoadProcess) { if (!_vm->_menuDirectlyToLoad) { restorePage1(_vm->_screenBuffer); backUpPage1(_vm->_screenBuffer); initMenu(*_currentMenu); updateAllMenuButtons(); } } else if (_vm->_gameToLoad >= 0) { restorePage1(_vm->_screenBuffer); restorePalette(); _vm->loadGameStateCheck(_vm->_gameToLoad); if (_vm->_gameToLoad == 0) { _restartGame = true; for (int i = 0; i < 23; ++i) _vm->resetCauldronStateTable(i); _vm->runStartScript(1, 1); } _displayMenu = false; _loadedSave = true; } return 0; }
int GUI_HoF::gameOptions(Button *caller) { updateMenuButton(caller); restorePage1(_vm->_screenBuffer); backUpPage1(_vm->_screenBuffer); initMenu(_gameOptions); _isOptionsMenu = true; const int menuX = _gameOptions.x; const int menuY = _gameOptions.y; for (int i = 0; i < 4; ++i) { int x = menuX + _sliderBarsPosition[i*2+0]; int y = menuY + _sliderBarsPosition[i*2+1]; _screen->drawShape(0, _vm->_buttonShapes[16], x, y, 0, 0); drawSliderBar(i, _vm->_buttonShapes[17]); _sliderButtons[0][i].buttonCallback = _sliderHandlerFunctor; _sliderButtons[0][i].x = x; _sliderButtons[0][i].y = y; _menuButtonList = addButtonToList(_menuButtonList, &_sliderButtons[0][i]); _sliderButtons[2][i].buttonCallback = _sliderHandlerFunctor; _sliderButtons[2][i].x = x + 10; _sliderButtons[2][i].y = y; _menuButtonList = addButtonToList(_menuButtonList, &_sliderButtons[2][i]); _sliderButtons[1][i].buttonCallback = _sliderHandlerFunctor; _sliderButtons[1][i].x = x + 120; _sliderButtons[1][i].y = y; _menuButtonList = addButtonToList(_menuButtonList, &_sliderButtons[1][i]); } while (_isOptionsMenu) { processHighlights(_gameOptions); getInput(); } restorePage1(_vm->_screenBuffer); backUpPage1(_vm->_screenBuffer); _vm->writeSettings(); initMenu(*_currentMenu); updateAllMenuButtons(); return 0; }
int GUI_HoF::optionsButton(Button *button) { PauseTimer pause(*_vm->_timer); _restartGame = false; _reloadTemporarySave = false; updateButton(&_vm->_inventoryButtons[0]); if (!_screen->isMouseVisible() && button) return 0; _vm->showMessage(0, 0xCF); if (_vm->_mouseState < -1) { _vm->_mouseState = -1; _screen->setMouseCursor(1, 1, _vm->getShapePtr(0)); return 0; } int oldHandItem = _vm->_itemInHand; _screen->setMouseCursor(0, 0, _vm->getShapePtr(0)); _vm->displayInvWsaLastFrame(); _displayMenu = true; for (uint i = 0; i < ARRAYSIZE(_menuButtons); ++i) { _menuButtons[i].data0Val1 = _menuButtons[i].data1Val1 = _menuButtons[i].data2Val1 = 4; _menuButtons[i].data0Callback = _redrawShadedButtonFunctor; _menuButtons[i].data1Callback = _menuButtons[i].data2Callback = _redrawButtonFunctor; } initMenuLayout(_mainMenu); initMenuLayout(_gameOptions); initMenuLayout(_audioOptions); initMenuLayout(_choiceMenu); _loadMenu.numberOfItems = 6; initMenuLayout(_loadMenu); initMenuLayout(_saveMenu); initMenuLayout(_savenameMenu); initMenuLayout(_deathMenu); _currentMenu = &_mainMenu; if (_vm->_menuDirectlyToLoad) { backUpPage1(_vm->_screenBuffer); setupPalette(); _loadedSave = false; loadMenu(0); if (_loadedSave) { if (_restartGame) _vm->_itemInHand = kItemNone; } else { restorePage1(_vm->_screenBuffer); restorePalette(); } resetState(-1); _vm->_menuDirectlyToLoad = false; return 0; } if (!button) { _currentMenu = &_deathMenu; _isDeathMenu = true; } else { _isDeathMenu = false; } backUpPage1(_vm->_screenBuffer); setupPalette(); initMenu(*_currentMenu); _madeSave = false; _loadedSave = false; updateAllMenuButtons(); if (_isDeathMenu) { while (!_screen->isMouseVisible()) _screen->showMouse(); } while (_displayMenu) { processHighlights(*_currentMenu); getInput(); } if (_vm->_runFlag && !_loadedSave && !_madeSave) { restorePalette(); restorePage1(_vm->_screenBuffer); } if (_vm->_runFlag) updateMenuButton(&_vm->_inventoryButtons[0]); resetState(oldHandItem); if (!_loadedSave && _reloadTemporarySave) { _vm->_unkSceneScreenFlag1 = true; _vm->loadGameStateCheck(999); //_vm->_saveFileMan->removeSavefile(_vm->getSavegameFilename(999)); _vm->_unkSceneScreenFlag1 = false; } return 0; }
void GUI::initMenu(Menu &menu) { _menuButtonList = 0; _screen->hideMouse(); int textX; int textY; int menu_x2 = menu.width + menu.x - 1; int menu_y2 = menu.height + menu.y - 1; _screen->fillRect(menu.x + 2, menu.y + 2, menu_x2 - 2, menu_y2 - 2, menu.bkgdColor); _screen->drawShadedBox(menu.x, menu.y, menu_x2, menu_y2, menu.color1, menu.color2); if (menu.titleX != -1) textX = menu.titleX; else textX = getMenuCenterStringX(getMenuTitle(menu), menu.x, menu_x2); textY = menu.y + menu.titleY; if (_vm->game() == GI_LOL) { printMenuText(getMenuTitle(menu), textX, textY, menu.textColor, 0, 9); } else { if (_vm->gameFlags().platform != Common::kPlatformAmiga) printMenuText(getMenuTitle(menu), textX - 1, textY + 1, defaultColor1(), defaultColor2(), 0); printMenuText(getMenuTitle(menu), textX, textY, menu.textColor, 0, 0); } int x1, y1, x2, y2; for (int i = 0; i < menu.numberOfItems; ++i) { if (!menu.item[i].enabled) continue; x1 = menu.x + menu.item[i].x; y1 = menu.y + menu.item[i].y; x2 = x1 + menu.item[i].width - 1; y2 = y1 + menu.item[i].height - 1; if (i < 7) { Button *menuButtonData = getButtonListData() + i; menuButtonData->nextButton = 0; menuButtonData->x = x1; menuButtonData->y = y1; menuButtonData->width = menu.item[i].width - 1; menuButtonData->height = menu.item[i].height - 1; menuButtonData->buttonCallback = menu.item[i].callback; menuButtonData->keyCode = menu.item[i].keyCode; menuButtonData->keyCode2 = 0; menuButtonData->arg = menu.item[i].itemId; _menuButtonList = addButtonToList(_menuButtonList, menuButtonData); } _screen->fillRect(x1, y1, x2, y2, menu.item[i].bkgdColor); _screen->drawShadedBox(x1, y1, x2, y2, menu.item[i].color1, menu.item[i].color2); if (getMenuItemTitle(menu.item[i])) { if (menu.item[i].titleX != -1) textX = x1 + menu.item[i].titleX + 3; else textX = getMenuCenterStringX(getMenuItemTitle(menu.item[i]), x1, x2); textY = y1 + 2; if (_vm->game() == GI_LOL) { textY++; if (i == menu.highlightedItem) printMenuText(getMenuItemTitle(menu.item[i]), textX, textY, menu.item[i].highlightColor, 0, 8); else printMenuText(getMenuItemTitle(menu.item[i]), textX, textY, menu.item[i].textColor, 0, 8); } else { Screen::FontId of = _screen->_currentFont; if (menu.item[i].saveSlot > 0) _screen->setFont(Screen::FID_8_FNT); if (_vm->gameFlags().platform != Common::kPlatformAmiga) printMenuText(getMenuItemTitle(menu.item[i]), textX - 1, textY + 1, defaultColor1(), 0, 0); if (i == menu.highlightedItem) printMenuText(getMenuItemTitle(menu.item[i]), textX, textY, menu.item[i].highlightColor, 0, 0); else printMenuText(getMenuItemTitle(menu.item[i]), textX, textY, menu.item[i].textColor, 0, 0); _screen->setFont(of); } } } for (int i = 0; i < menu.numberOfItems; ++i) { if (getMenuItemLabel(menu.item[i])) { if (_vm->game() == GI_LOL) { menu.item[i].labelX = menu.item[i].x - 1; menu.item[i].labelY = menu.item[i].y + 3; printMenuText(getMenuItemLabel(menu.item[i]), menu.x + menu.item[i].labelX, menu.y + menu.item[i].labelY, menu.item[i].textColor, 0, 10); } else { if (_vm->gameFlags().platform != Common::kPlatformAmiga) printMenuText(getMenuItemLabel(menu.item[i]), menu.x + menu.item[i].labelX - 1, menu.y + menu.item[i].labelY + 1, defaultColor1(), 0, 0); printMenuText(getMenuItemLabel(menu.item[i]), menu.x + menu.item[i].labelX, menu.y + menu.item[i].labelY, menu.item[i].textColor, 0, 0); } } } if (menu.scrollUpButtonX != -1) { Button *scrollUpButton = getScrollUpButton(); scrollUpButton->x = menu.scrollUpButtonX + menu.x; scrollUpButton->y = menu.scrollUpButtonY + menu.y; scrollUpButton->buttonCallback = getScrollUpButtonHandler(); scrollUpButton->nextButton = 0; scrollUpButton->mouseWheel = -1; _menuButtonList = addButtonToList(_menuButtonList, scrollUpButton); updateMenuButton(scrollUpButton); Button *scrollDownButton = getScrollDownButton(); scrollDownButton->x = menu.scrollDownButtonX + menu.x; scrollDownButton->y = menu.scrollDownButtonY + menu.y; scrollDownButton->buttonCallback = getScrollDownButtonHandler(); scrollDownButton->nextButton = 0; scrollDownButton->mouseWheel = 1; _menuButtonList = addButtonToList(_menuButtonList, scrollDownButton); updateMenuButton(scrollDownButton); } _screen->showMouse(); _screen->updateScreen(); }
void GUI::updateAllMenuButtons() { for (Button *cur = _menuButtonList; cur; cur = cur->nextButton) updateMenuButton(cur); }