Ticket #12601: space-ship-puzzle-fuzzy-logic-ver3.diff

File space-ship-puzzle-fuzzy-logic-ver3.diff, 6.4 KB (added by AspireONE-zz, 3 years ago)

fuzzy logic settable via options menu

  • engines/mohawk/dialogs.cpp

    diff --git a/engines/mohawk/dialogs.cpp b/engines/mohawk/dialogs.cpp
    index a70ea67281..0965b7d607 100644
    a b MystOptionsWidget::MystOptionsWidget(GuiObject *boss, const Common::String &name  
    9999                _zipModeCheckbox(nullptr),
    100100                _transitionsCheckbox(nullptr),
    101101                _mystFlyByCheckbox(nullptr),
     102                _spaceshipFuzzyLogicCheckbox(nullptr),
    102103                _languagePopUp(nullptr),
    103104                _dropPageButton(nullptr),
    104105                _showMapButton(nullptr),
    MystOptionsWidget::MystOptionsWidget(GuiObject *boss, const Common::String &name  
    119120                                                             _("The Myst fly by movie was not played by the original engine."));
    120121        }
    121122
     123        if (!isDemo) {
     124/* I18N:
     125This Option is for hard-of-hearing.
     126It makes it easier to solve the spaceship puzzle.
     127Normally game uses strict binary logic here.
     128We change it to use fuzzy logic.
     129*/
     130
     131                _spaceshipFuzzyLogicCheckbox = new GUI::CheckboxWidget(widgetsBoss(), "MystGameOptionsDialog.FuzzyMode", _("~F~uzzy Logic in SpaceShip Active"));
     132        }
     133
    122134        if (isInGame()) {
    123135                MohawkEngine_Myst *vm = static_cast<MohawkEngine_Myst *>(g_engine);
    124136                assert(vm);
    void MystOptionsWidget::defineLayout(GUI::ThemeEval &layouts, const Common::Stri  
    161173                        .addWidget("ZipMode", "Checkbox")
    162174                        .addWidget("Transistions", "Checkbox")
    163175                        .addWidget("PlayMystFlyBy", "Checkbox")
     176                        .addWidget("FuzzyMode", "Checkbox")
    164177                        .addLayout(GUI::ThemeLayout::kLayoutHorizontal)
    165178                            .addPadding(0, 0, 0, 0)
    166179                            .addWidget("LanguageDesc", "OptionsLabel")
    void MystOptionsWidget::load() {  
    193206                _mystFlyByCheckbox->setState(ConfMan.getBool("playmystflyby", _domain));
    194207        }
    195208
     209        if (_spaceshipFuzzyLogicCheckbox) {
     210                _spaceshipFuzzyLogicCheckbox->setState(ConfMan.getBool("fuzzy_logic", _domain));
     211        }
     212
    196213        if (_languagePopUp) {
    197214                Common::Language language = Common::parseLanguage(ConfMan.get("language", _domain));
    198215                const MystLanguage *languageDesc = MohawkEngine_Myst::getLanguageDesc(language);
    bool MystOptionsWidget::save() {  
    229246                ConfMan.setBool("playmystflyby", _mystFlyByCheckbox->getState(), _domain);
    230247        }
    231248
     249        if (_spaceshipFuzzyLogicCheckbox) {
     250                ConfMan.setBool("fuzzy_logic", _spaceshipFuzzyLogicCheckbox->getState(), _domain);
     251        }
     252
    232253        if (_languagePopUp) {
    233254                MohawkEngine_Myst *vm = static_cast<MohawkEngine_Myst *>(g_engine);
    234255                assert(vm);
  • engines/mohawk/dialogs.h

    diff --git a/engines/mohawk/dialogs.h b/engines/mohawk/dialogs.h
    index 776172b537..d479dddf94 100644
    a b private:  
    100100        GUI::CheckboxWidget *_zipModeCheckbox;
    101101        GUI::CheckboxWidget *_transitionsCheckbox;
    102102        GUI::CheckboxWidget *_mystFlyByCheckbox;
     103        GUI::CheckboxWidget *_spaceshipFuzzyLogicCheckbox;
     104
    103105        GUI::PopUpWidget *_languagePopUp;
    104106
    105107        GUI::ButtonWidget *_dropPageButton;
  • engines/mohawk/myst_metaengine.cpp

    diff --git a/engines/mohawk/myst_metaengine.cpp b/engines/mohawk/myst_metaengine.cpp
    index 7f400bb308..a77b3e8573 100644
    a b void Mohawk::MohawkMetaEngine_Myst::registerDefaultSettings() {  
    2626        ConfMan.registerDefault("playmystflyby", false);
    2727        ConfMan.registerDefault("zip_mode", false);
    2828        ConfMan.registerDefault("transition_mode", false);
     29        ConfMan.registerDefault("fuzzy_logic", false);
    2930}
    3031
    3132const Mohawk::MystLanguage *Mohawk::MohawkMetaEngine_Myst::listLanguages() {
  • engines/mohawk/myst_stacks/myst.cpp

    diff --git a/engines/mohawk/myst_stacks/myst.cpp b/engines/mohawk/myst_stacks/myst.cpp
    index de9a375d0c..0355cc430f 100644
    a b  
    3030#include "mohawk/video.h"
    3131#include "mohawk/myst_stacks/myst.h"
    3232
     33#include "common/config-manager.h"
    3334#include "common/events.h"
    3435#include "common/math.h"
    3536#include "common/system.h"
    uint16 Myst::rocketSliderGetSound(uint16 pos) {  
    22922293        return (uint16)(9530 + (pos - 216) * 35.0 / 61.0);
    22932294}
    22942295
     2296
     2297uint16 Myst::rocketCheckSolutionLogicHelper(uint16 sound1, uint16 sound2, uint16 logictype) {
     2298
     2299        debugN("helper: %i %i %i (diff:% 3i) ",sound1, sound2 , logictype, sound1-sound2);
     2300        if (logictype==0) {
     2301
     2302                if (sound1 != sound2) {
     2303                        debugN("strict : false \n");
     2304                        return false;
     2305                }
     2306
     2307        } else {
     2308
     2309               if ( abs(sound1-sound2)>=5) {
     2310                        debugN(" fuzzy : false \n");
     2311                        return false;
     2312                }
     2313
     2314        }
     2315
     2316        debugN("either : true \n");
     2317        return true;
     2318
     2319}
     2320
    22952321void Myst::rocketCheckSolution() {
    22962322        _vm->_cursor->hideCursor();
    22972323
    22982324        uint16 soundId;
    22992325        bool solved = true;
     2326        bool fuzzylogic = false;
     2327
     2328         if (ConfMan.getBool("fuzzy_logic")) {
     2329                fuzzylogic = true;
     2330        }
     2331
    23002332
    23012333        soundId = rocketSliderGetSound(_rocketSlider1->_pos.y);
    23022334        _vm->_sound->playEffect(soundId);
    23032335        _rocketSlider1->drawConditionalDataToScreen(2);
    23042336        _vm->wait(250);
    2305         if (soundId != 9558)
     2337        if ( !rocketCheckSolutionLogicHelper(soundId,9558,fuzzylogic) )
    23062338                solved = false;
    23072339
    23082340        soundId = rocketSliderGetSound(_rocketSlider2->_pos.y);
    23092341        _vm->_sound->playEffect(soundId);
    23102342        _rocketSlider2->drawConditionalDataToScreen(2);
    23112343        _vm->wait(250);
    2312         if (soundId != 9546)
     2344        if ( !rocketCheckSolutionLogicHelper(soundId,9546,fuzzylogic) )
    23132345                solved = false;
    23142346
    23152347        soundId = rocketSliderGetSound(_rocketSlider3->_pos.y);
    23162348        _vm->_sound->playEffect(soundId);
    23172349        _rocketSlider3->drawConditionalDataToScreen(2);
    23182350        _vm->wait(250);
    2319         if (soundId != 9543)
     2351        if ( !rocketCheckSolutionLogicHelper(soundId,9543,fuzzylogic) )
    23202352                solved = false;
    23212353
    23222354        soundId = rocketSliderGetSound(_rocketSlider4->_pos.y);
    23232355        _vm->_sound->playEffect(soundId);
    23242356        _rocketSlider4->drawConditionalDataToScreen(2);
    23252357        _vm->wait(250);
    2326         if (soundId != 9553)
     2358        if ( !rocketCheckSolutionLogicHelper(soundId,9553,fuzzylogic) )
    23272359                solved = false;
    23282360
    23292361        soundId = rocketSliderGetSound(_rocketSlider5->_pos.y);
    23302362        _vm->_sound->playEffect(soundId);
    23312363        _rocketSlider5->drawConditionalDataToScreen(2);
    23322364        _vm->wait(250);
    2333         if (soundId != 9560)
     2365        if ( !rocketCheckSolutionLogicHelper(soundId,9560,fuzzylogic) )
    23342366                solved = false;
    23352367
    23362368        _vm->_sound->stopEffect();
  • engines/mohawk/myst_stacks/myst.h

    diff --git a/engines/mohawk/myst_stacks/myst.h b/engines/mohawk/myst_stacks/myst.h
    index 3739630379..6e8c9d95de 100644
    a b protected:  
    312312
    313313        void rocketSliderMove();
    314314        uint16 rocketSliderGetSound(uint16 pos);
     315        uint16 rocketCheckSolutionLogicHelper(uint16 sound1, uint16 sound2, uint16 logictype);
    315316        void rocketCheckSolution();
    316317
    317318        void libraryBookPageTurnLeft();