TWINE: ensure menu background after giving up

also the initial values for the advanced menu entries are correct now
This commit is contained in:
Martin Gerhardy
2020-11-13 17:45:04 +01:00
parent 2c06f2bba7
commit 5366ea735c
5 changed files with 55 additions and 28 deletions
+8 -2
View File
@@ -64,7 +64,7 @@ void GameState::initEngineProjections() {
_engine->_renderer->setLightVector(_engine->_scene->alphaLight, _engine->_scene->betaLight, 0);
}
void GameState::initSceneVars() {
void GameState::initGameStateVars() {
_engine->_extra->resetExtras();
for (int32 i = 0; i < OVERLAY_MAX_ENTRIES; i++) {
@@ -116,7 +116,7 @@ void GameState::initEngineVars() {
_engine->_scene->alphaLight = 896;
_engine->_scene->betaLight = 950;
initEngineProjections();
initSceneVars();
initGameStateVars();
initHeroVars();
_engine->_scene->newHeroX = 0x2000;
@@ -485,4 +485,10 @@ void GameState::processGameoverAnimation() {
_engine->lbaTime = tmpLbaTime;
}
void GameState::giveUp() {
_engine->_sound->stopSamples();
initGameStateVars();
_engine->_scene->stopRunningGame();
}
} // namespace TwinE
+2 -1
View File
@@ -86,7 +86,7 @@ class GameState {
private:
TwinEEngine *_engine;
void initSceneVars();
void initGameStateVars();
void initHeroVars();
public:
@@ -161,6 +161,7 @@ public:
void processFoundItem(int32 item);
void giveUp();
bool loadGame(Common::SeekableReadStream *file);
bool saveGame(Common::WriteStream *file);
+40 -25
View File
@@ -324,6 +324,45 @@ void Menu::drawButtons(MenuSettings *menuSettings, bool hover) {
}
for (int16 i = 0; i < maxButton; ++i) {
if (menuSettings == &advOptionsMenuState) {
int16 id = menuSettings->getButtonState(i);
switch (id) {
case MenuButtonTypes::kAgressiveMode:
if (_engine->_actor->autoAgressive) {
menuSettings->setButtonTextId(i, TextId::kBehaviourAgressiveAuto);
} else {
menuSettings->setButtonTextId(i, TextId::kBehaviourAgressiveManual);
}
break;
case MenuButtonTypes::kPolygonDetails:
if (_engine->cfgfile.PolygonDetails == 0) {
menuSettings->setButtonTextId(i, TextId::kDetailsPolygonsLow);
} else if (_engine->cfgfile.PolygonDetails == 1) {
menuSettings->setButtonTextId(i, TextId::kDetailsPolygonsMiddle);
} else {
menuSettings->setButtonTextId(i, TextId::kDetailsPolygonsHigh);
}
break;
case MenuButtonTypes::kShadowSettings:
if (_engine->cfgfile.ShadowMode == 0) {
menuSettings->setButtonTextId(i, TextId::kShadowsDisabled);
} else if (_engine->cfgfile.ShadowMode == 1) {
menuSettings->setButtonTextId(i, TextId::kShadowsFigures);
} else {
menuSettings->setButtonTextId(i, TextId::kDetailsShadowHigh);
}
break;
case MenuButtonTypes::kSceneryZoom:
if (_engine->cfgfile.SceZoom) {
menuSettings->setButtonTextId(i, TextId::kScenaryZoomOn);
} else {
menuSettings->setButtonTextId(i, TextId::kNoScenaryZoom);
}
break;
default:
break;
}
}
const int32 menuItemId = menuSettings->getButtonState(i);
const char *text = menuSettings->getButtonText(_engine->_text, i);
if (hover) {
@@ -381,11 +420,6 @@ int32 Menu::processMenu(MenuSettings *menuSettings) {
if (_engine->_input->toggleActionIfActive(TwinEActionType::UILeft) || _engine->_input->toggleActionIfActive(TwinEActionType::UIRight)) {
_engine->_actor->autoAgressive = !_engine->_actor->autoAgressive;
}
if (_engine->_actor->autoAgressive) {
menuSettings->setActiveButtonTextId(TextId::kBehaviourAgressiveAuto);
} else {
menuSettings->setActiveButtonTextId(TextId::kBehaviourAgressiveManual);
}
break;
case MenuButtonTypes::kPolygonDetails:
if (_engine->_input->toggleActionIfActive(TwinEActionType::UILeft)) {
@@ -395,13 +429,6 @@ int32 Menu::processMenu(MenuSettings *menuSettings) {
_engine->cfgfile.PolygonDetails++;
_engine->cfgfile.PolygonDetails %= 3;
}
if (_engine->cfgfile.PolygonDetails == 0) {
menuSettings->setActiveButtonTextId(TextId::kDetailsPolygonsLow);
} else if (_engine->cfgfile.PolygonDetails == 1) {
menuSettings->setActiveButtonTextId(TextId::kDetailsPolygonsMiddle);
} else {
menuSettings->setActiveButtonTextId(TextId::kDetailsPolygonsHigh);
}
break;
case MenuButtonTypes::kShadowSettings:
if (_engine->_input->toggleActionIfActive(TwinEActionType::UILeft)) {
@@ -411,23 +438,11 @@ int32 Menu::processMenu(MenuSettings *menuSettings) {
_engine->cfgfile.ShadowMode++;
_engine->cfgfile.ShadowMode %= 3;
}
if (_engine->cfgfile.ShadowMode == 0) {
menuSettings->setActiveButtonTextId(TextId::kShadowsDisabled);
} else if (_engine->cfgfile.ShadowMode == 1) {
menuSettings->setActiveButtonTextId(TextId::kShadowsFigures);
} else {
menuSettings->setActiveButtonTextId(TextId::kDetailsShadowHigh);
}
break;
case MenuButtonTypes::kSceneryZoom:
if (_engine->_input->toggleActionIfActive(TwinEActionType::UILeft) || _engine->_input->toggleActionIfActive(TwinEActionType::UIRight)) {
_engine->cfgfile.SceZoom = !_engine->cfgfile.SceZoom;
}
if (_engine->cfgfile.SceZoom) {
menuSettings->setActiveButtonTextId(TextId::kScenaryZoomOn);
} else {
menuSettings->setActiveButtonTextId(TextId::kNoScenaryZoom);
}
break;
default:
break;
@@ -692,7 +707,7 @@ int32 Menu::giveupMenu() {
_engine->_sound->resumeSamples();
break;
case TextId::kGiveUp:
_engine->_sound->stopSamples();
_engine->_gameState->giveUp();
return 1;
case TextId::kCreateSaveGame:
_engine->_menuOptions->saveGameMenu();
+4
View File
@@ -536,4 +536,8 @@ void Scene::processActorZones(int32 actorIdx) {
}
}
void Scene::stopRunningGame() {
currentScene = nullptr;
}
} // namespace TwinE
+1
View File
@@ -346,6 +346,7 @@ public:
void initSceneVars();
bool isGameRunning() const;
void stopRunningGame();
/**
* Process actor zones