Ticket #3860: tinsel-multiflags.patch

File tinsel-multiflags.patch, 13.7 KB (added by fingolfin, 16 years ago)

Enhanced patch which enables language selection

  • engines/tinsel/config.h

     
    3030
    3131namespace Tinsel {
    3232
    33 // None of these defined -> 1 language, in ENGLISH.TXT
    34 //#define USE_5FLAGS    1       // All 5 flags
    35 //#define USE_4FLAGS    1       // French, German, Italian, Spanish
    36 //#define USE_3FLAGS    1       // French, German, Spanish
    37 
    3833// The Hebrew version appears to the software as being English
    3934// but it needs to have subtitles on...
    4035//#define HEBREW        1
  • engines/tinsel/tinsel.cpp

     
    697697
    698698        // Set language - we'll be clever here and use the ScummVM language setting
    699699        language = TXT_ENGLISH;
    700         switch (getLanguage()) {
     700        Common::Language lang = getLanguage();
     701        if (lang == Common::UNK_LANG && ConfMan.hasKey("language"))
     702                lang = Common::parseLanguage(ConfMan.get("language"));  // For multi-lingual versions, fall back to user settings
     703        switch (lang) {
    701704        case Common::FR_FRA:
    702705                language = TXT_FRENCH;
    703706                break;
  • engines/tinsel/config.cpp

     
    2424 * This file contains configuration functionality
    2525 */
    2626
    27 //#define USE_3FLAGS 1
    28 
    2927#include "tinsel/config.h"
    3028#include "tinsel/dw.h"
    3129#include "tinsel/sound.h"
     
    9391        //bSwapButtons = ConfMan.getBool("swap_buttons") == 1 ? true : false;
    9492        //ConfigData.language = language;       // not necessary, as language has been set in the launcher
    9593        //ConfigData.bAmerica = bAmerica;               // EN_USA / EN_GRB
    96 
    97 // The flags here control how many country flags are displayed in one of the option dialogs.
    98 #if defined(USE_3FLAGS) || defined(USE_4FLAGS) || defined(USE_5FLAGS)
    99         language = ConfigData.language;
    100  #ifdef USE_3FLAGS
    101         if (language == TXT_ENGLISH || language == TXT_ITALIAN) {
    102                 language = TXT_GERMAN;
    103                 bSubtitles = true;
    104         }
    105  #endif
    106  #ifdef USE_4FLAGS
    107         if (language == TXT_ENGLISH) {
    108                 language = TXT_GERMAN;
    109                 bSubtitles = true;
    110         }
    111  #endif
    112 #else
    113         language = TXT_ENGLISH;
    114 #endif
    11594}
    11695
    11796bool isJapanMode() {
  • engines/tinsel/inventory.cpp

     
    2929 * And there's still a bit of tidying and commenting to do yet.
    3030 */
    3131
    32 //#define USE_3FLAGS 1
    33 
    3432#include "tinsel/actors.h"
    3533#include "tinsel/anim.h"
    3634#include "tinsel/background.h"
     
    370368        NOFUNC, SAVEGAME, LOADGAME, IQUITGAME, CLOSEWIN,
    371369        OPENLOAD, OPENSAVE, OPENREST,
    372370        OPENSOUND, OPENCONT,
    373 #ifndef JAPAN
    374371        OPENSUBT,
    375 #endif
    376372        OPENQUIT,
    377373        INITGAME, MIDIVOL,
    378374        CLANG, RLANG
     
    402398#define SIX_RESTART_OPTION      2
    403399#define SIX_SOUND_OPTION        3
    404400#define SIX_CONTROL_OPTION      4
    405 #ifndef JAPAN
    406401#define SIX_SUBTITLES_OPTION    5
    407 #endif
    408402#define SIX_QUIT_OPTION         6
    409403#define SIX_RESUME_OPTION       7
    410404#define SIX_LOAD_HEADING        8
     
    568562
    569563
    570564/*-------------------------------------------------------------*\
    571 | This is the subtitles 'menu'.                                 |
     565| This is the subtitles 'menu'.                                 |
    572566\*-------------------------------------------------------------*/
    573567
    574 #ifndef JAPAN
    575568CONFBOX subtitlesBox[] = {
    576569
    577 #ifdef USE_5FLAGS
     570 { SLIDER, NOFUNC, NULL, SIX_TSPEED_SLIDER,     142, 20,        100, 2, &speedText, 0 },
     571 { TOGGLE, NOFUNC, NULL, SIX_STITLE_TOGGLE,     142, 20+40,     23, 19, &bSubtitles, 0 },
     572
     573};
     574
     575CONFBOX subtitlesBox3Flags[] = {
     576
     577 { FRGROUP, NOFUNC, NULL, USE_POINTER,  15, 118,        56, 32, NULL, FIX_FR },
     578 { FRGROUP, NOFUNC, NULL, USE_POINTER,  85, 118,        56, 32, NULL, FIX_GR },
     579 { FRGROUP, NOFUNC, NULL, USE_POINTER,  155, 118,       56, 32, NULL, FIX_SP },
     580
     581 { SLIDER, NOFUNC, NULL, SIX_TSPEED_SLIDER,     142, 20,        100, 2, &speedText, 0 },
     582 { TOGGLE, NOFUNC, NULL, SIX_STITLE_TOGGLE,     142, 20+40,     23, 19, &bSubtitles, 0 },
     583
     584 { ARSGBUT, CLANG, NULL, USE_POINTER,   230, 110,       23, 19, NULL, IX_TICK1 },
     585 { AAGBUT, RLANG, NULL, USE_POINTER,    230, 140,       23, 19, NULL, IX_CROSS1 }
     586
     587};
     588
     589CONFBOX subtitlesBox4Flags[] = {
     590
     591 { FRGROUP, NOFUNC, NULL, USE_POINTER,  20, 100,        56, 32, NULL, FIX_FR },
     592 { FRGROUP, NOFUNC, NULL, USE_POINTER,  108, 100,       56, 32, NULL, FIX_GR },
     593 { FRGROUP, NOFUNC, NULL, USE_POINTER,  64, 137,        56, 32, NULL, FIX_IT },
     594 { FRGROUP, NOFUNC, NULL, USE_POINTER,  152, 137,       56, 32, NULL, FIX_SP },
     595
     596 { SLIDER, NOFUNC, NULL, SIX_TSPEED_SLIDER,     142, 20,        100, 2, &speedText, 0 },
     597 { TOGGLE, NOFUNC, NULL, SIX_STITLE_TOGGLE,     142, 20+40,     23, 19, &bSubtitles, 0 },
     598
     599 { ARSGBUT, CLANG, NULL, USE_POINTER,   230, 110,       23, 19, NULL, IX_TICK1 },
     600 { AAGBUT, RLANG, NULL, USE_POINTER,    230, 140,       23, 19, NULL, IX_CROSS1 }
     601
     602};
     603
     604CONFBOX subtitlesBox5Flags[] = {
     605
    578606 { FRGROUP, NOFUNC, NULL, USE_POINTER,  15, 100,        56, 32, NULL, FIX_UK },
    579607 { FRGROUP, NOFUNC, NULL, USE_POINTER,  85, 100,        56, 32, NULL, FIX_FR },
    580608 { FRGROUP, NOFUNC, NULL, USE_POINTER,  155, 100,       56, 32, NULL, FIX_GR },
    581609 { FRGROUP, NOFUNC, NULL, USE_POINTER,  50, 137,        56, 32, NULL, FIX_IT },
    582610 { FRGROUP, NOFUNC, NULL, USE_POINTER,  120, 137,       56, 32, NULL, FIX_SP },
    583 #endif
    584 #ifdef USE_4FLAGS
    585  { FRGROUP, NOFUNC, NULL, USE_POINTER,  20, 100,        56, 32, NULL, FIX_FR },
    586  { FRGROUP, NOFUNC, NULL, USE_POINTER,  108, 100,       56, 32, NULL, FIX_GR },
    587  { FRGROUP, NOFUNC, NULL, USE_POINTER,  64, 137,        56, 32, NULL, FIX_IT },
    588  { FRGROUP, NOFUNC, NULL, USE_POINTER,  152, 137,       56, 32, NULL, FIX_SP },
    589 #endif
    590 #ifdef USE_3FLAGS
    591  { FRGROUP, NOFUNC, NULL, USE_POINTER,  15, 118,        56, 32, NULL, FIX_FR },
    592  { FRGROUP, NOFUNC, NULL, USE_POINTER,  85, 118,        56, 32, NULL, FIX_GR },
    593  { FRGROUP, NOFUNC, NULL, USE_POINTER,  155, 118,       56, 32, NULL, FIX_SP },
    594 #endif
    595611
    596612 { SLIDER, NOFUNC, NULL, SIX_TSPEED_SLIDER,     142, 20,        100, 2, &speedText, 0 },
    597613 { TOGGLE, NOFUNC, NULL, SIX_STITLE_TOGGLE,     142, 20+40,     23, 19, &bSubtitles, 0 },
    598614
    599 #if defined(USE_3FLAGS) || defined(USE_4FLAGS) || defined(USE_5FLAGS)
    600615 { ARSGBUT, CLANG, NULL, USE_POINTER,   230, 110,       23, 19, NULL, IX_TICK1 },
    601616 { AAGBUT, RLANG, NULL, USE_POINTER,    230, 140,       23, 19, NULL, IX_CROSS1 }
    602 #endif
    603617
    604618};
    605 #endif
    606619
    607620
    608621/*-------------------------------------------------------------*\
     
    610623\*-------------------------------------------------------------*/
    611624
    612625CONFBOX quitBox[] = {
    613 #ifdef JAPAN
     626#ifdef g
    614627 { AAGBUT, IQUITGAME, NULL, USE_POINTER,70, 44, 23, 19, NULL, IX_TICK1 },
    615628 { AAGBUT, CLOSEWIN, NULL, USE_POINTER, 30, 44, 23, 19, NULL, IX_CROSS1 }
    616629#else
     
    652665#else
    653666        CONFINIT ciControl      = { 10, 5, 20, 16, false, controlBox,   ARRAYSIZE(controlBox),  NO_HEADING };
    654667#endif
    655 #ifndef JAPAN
    656 #if defined(USE_3FLAGS) || defined(USE_4FLAGS) || defined(USE_5FLAGS)
    657 CONFINIT ciSubtitles    = { 10, 6, 20, 16, false, subtitlesBox, ARRAYSIZE(subtitlesBox),        NO_HEADING };
    658 #else
     668
    659669CONFINIT ciSubtitles    = { 10, 3, 20, 16, false, subtitlesBox, ARRAYSIZE(subtitlesBox),        NO_HEADING };
    660 #endif
    661 #endif
     670
    662671CONFINIT ciQuit         = { 4, 2, 98, 53, false, quitBox,       ARRAYSIZE(quitBox),     SIX_QUIT_HEADING };
    663672
    664673CONFINIT ciTopWin       = { 6, 5, 72, 23, false, topwinBox,     0,                                      NO_HEADING };
     
    762771
    763772
    764773
    765 #ifndef JAPAN
    766774bool LanguageChange(void) {
    767775        LANGUAGE nLang;
    768776
    769 #ifdef USE_3FLAGS
    770         // VERY quick dodgy bodge
    771         if (cd.selBox == 0)
    772                 nLang = TXT_FRENCH;             // = 1
    773         else if (cd.selBox == 1)
    774                 nLang = TXT_GERMAN;             // = 2
    775         else
    776                 nLang = TXT_SPANISH;    // = 4
    777 #elif defined(USE_4FLAGS)
    778         nLang = (LANGUAGE)(cd.selBox + 1);
    779 #else
    780         nLang = (LANGUAGE)cd.selBox;
    781 #endif
     777        if (_vm->getFeatures() & GF_USE_3FLAGS) {
     778                // VERY quick dodgy bodge
     779                if (cd.selBox == 0)
     780                        nLang = TXT_FRENCH;             // = 1
     781                else if (cd.selBox == 1)
     782                        nLang = TXT_GERMAN;             // = 2
     783                else
     784                        nLang = TXT_SPANISH;    // = 4
     785        } else if (_vm->getFeatures() & GF_USE_4FLAGS) {
     786                nLang = (LANGUAGE)(cd.selBox + 1);
     787        } else if (_vm->getFeatures() & GF_USE_5FLAGS) {
     788                nLang = (LANGUAGE)cd.selBox;
     789        }
    782790
    783791        if (nLang != language) {
    784792                KillInventory();
     
    788796        } else
    789797                return false;
    790798}
    791 #endif
    792799
    793800/**************************************************************************/
    794801/******************** Some miscellaneous functions ************************/
     
    12121219
    12131220                break;
    12141221
    1215 #if defined(USE_3FLAGS) || defined(USE_4FLAGS) || defined(USE_5FLAGS)
    12161222        case FRGROUP:
     1223                assert((_vm->getFeatures() & GF_USE_3FLAGS) || (_vm->getFeatures() & GF_USE_4FLAGS) || (_vm->getFeatures() & GF_USE_5FLAGS));
    12171224                iconArray[HL2] = RectangleObject(BackPal(), COL_HILIGHT, cd.Box[i].w+6, cd.Box[i].h+6);
    12181225                MultiInsertObject(GetPlayfieldList(FIELD_STATUS), iconArray[HL2]);
    12191226                MultiSetAniXY(iconArray[HL2],
     
    12221229                MultiSetZPosition(iconArray[HL2], Z_INV_BRECT+1);
    12231230
    12241231                break;
    1225 #endif
     1232
    12261233        default:
    12271234                break;
    12281235        }
     
    21242131
    21252132                break;
    21262133
    2127 #if defined(USE_3FLAGS) || defined(USE_4FLAGS) || defined(USE_5FLAGS)
    21282134        case FRGROUP:
     2135                assert((_vm->getFeatures() & GF_USE_3FLAGS) || (_vm->getFeatures() & GF_USE_4FLAGS) || (_vm->getFeatures() & GF_USE_5FLAGS));
    21292136                assert(flagFilm != 0); // Language flags not declared!
    21302137
    21312138                pfilm = (const FILM *)LockMem(flagFilm);
     
    21392146                *pi += 1;
    21402147
    21412148                break;
    2142 #endif
     2149
    21432150        case FLIP:
    21442151                pfilm = (const FILM *)LockMem(winPartsf);
    21452152
     
    29012908                SetConfGlobals(&ciSound);
    29022909                break;
    29032910
    2904 #ifndef JAPAN
    29052911        case SUBT:
     2912                if (_vm->getFeatures() & GF_USE_3FLAGS) {
     2913                        ciSubtitles.v = 6;
     2914                        ciSubtitles.Box = subtitlesBox3Flags;
     2915                        ciSubtitles.NumBoxes = ARRAYSIZE(subtitlesBox3Flags);
     2916                } else if (_vm->getFeatures() & GF_USE_4FLAGS) {
     2917                        ciSubtitles.v = 6;
     2918                        ciSubtitles.Box = subtitlesBox4Flags;
     2919                        ciSubtitles.NumBoxes = ARRAYSIZE(subtitlesBox4Flags);
     2920                } else if (_vm->getFeatures() & GF_USE_5FLAGS) {
     2921                        ciSubtitles.v = 6;
     2922                        ciSubtitles.Box = subtitlesBox4Flags;
     2923                        ciSubtitles.NumBoxes = ARRAYSIZE(subtitlesBox4Flags);
     2924                } else {
     2925                        ciSubtitles.v = 3;
     2926                        ciSubtitles.Box = subtitlesBox;
     2927                        ciSubtitles.NumBoxes = ARRAYSIZE(subtitlesBox);
     2928                }
     2929
    29062930                SetConfGlobals(&ciSubtitles);
    29072931                break;
    2908 #endif
    29092932
    29102933        case TOPWIN:
    29112934                SetConfGlobals(&ciTopWin);
     
    29252948
    29262949        if (type == SAVE || type == LOAD)
    29272950                Select(0, false);
    2928 #ifndef JAPAN
    2929 #if !defined(USE_3FLAGS) || !defined(USE_4FLAGS) || !defined(USE_5FLAGS)
    29302951        else if (type == SUBT) {
    2931 #ifdef USE_3FLAGS
    2932                 // VERY quick dirty bodges
    2933                 if (language == TXT_FRENCH)
    2934                         Select(0, false);
    2935                 else if (language == TXT_GERMAN)
    2936                         Select(1, false);
    2937                 else
    2938                         Select(2, false);
    2939 #elif defined(USE_4FLAGS)
    2940                 Select(language-1, false);
    2941 #else
    2942                 Select(language, false);
    2943 #endif
     2952                if (_vm->getFeatures() & GF_USE_3FLAGS) {
     2953                        // VERY quick dirty bodges
     2954                        if (language == TXT_FRENCH)
     2955                                Select(0, false);
     2956                        else if (language == TXT_GERMAN)
     2957                                Select(1, false);
     2958                        else
     2959                                Select(2, false);
     2960                } else if (_vm->getFeatures() & GF_USE_4FLAGS) {
     2961                        Select(language-1, false);
     2962                } else if (_vm->getFeatures() & GF_USE_5FLAGS) {
     2963                        Select(language, false);
     2964                }
    29442965        }
    2945 #endif
    2946 #endif // JAPAN
    29472966
    29482967        GetCursorXY(&curX, &curY, false);
    29492968        InvCursor(IC_AREA, curX, curY);
     
    30963115                                        KillInventory();
    30973116                                        PopUpConf(CONTROLS);
    30983117                                        break;
    3099         #ifndef JAPAN
    31003118                                case OPENSUBT:
    31013119                                        KillInventory();
    31023120                                        PopUpConf(SUBT);
    31033121                                        break;
    3104         #endif
    31053122                                case OPENQUIT:
    31063123                                        KillInventory();
    31073124                                        PopUpConf(QUIT);
     
    31103127                                        KillInventory();
    31113128                                        bRestart = true;
    31123129                                        break;
    3113         #if defined(USE_3FLAGS) || defined(USE_4FLAGS) || defined(USE_5FLAGS)
    31143130                                case CLANG:
    31153131                                        if (!LanguageChange())
    31163132                                                KillInventory();
     
    31183134                                case RLANG:
    31193135                                        KillInventory();
    31203136                                        break;
    3121         #endif
    31223137                                default:
    31233138                                        break;
    31243139                                }
     
    33423357
    33433358        case S_END:                     // End of a drag on the slider
    33443359                AddBoxes(false);        // Might change position slightly
    3345 #ifndef JAPAN
    33463360                if (ino == INV_CONF && cd.Box == subtitlesBox)
    33473361                        Select(language, false);
    3348 #endif
    33493362                break;
    33503363        }
    33513364}
     
    37783791                        }
    37793792                        break;
    37803793
    3781 #if defined(USE_3FLAGS) || defined(USE_4FLAGS) || defined(USE_5FLAGS)
    37823794                case FRGROUP:
     3795                        assert((_vm->getFeatures() & GF_USE_3FLAGS) || (_vm->getFeatures() & GF_USE_4FLAGS) || (_vm->getFeatures() & GF_USE_5FLAGS));
    37833796                        if (dbl) {
    37843797                                Select(i, false);
    37853798                                LanguageChange();
     
    37873800                                Select(i, false);
    37883801                        }
    37893802                        break;
    3790 #endif
    37913803
    37923804                case AAGBUT:
    37933805                case ARSGBUT:
  • engines/tinsel/tinsel.h

     
    5555        GF_DEMO = 1 << 0,
    5656        GF_CD = 1 << 1,
    5757        GF_FLOPPY = 1 << 2,
    58         GF_SCNFILES = 1 << 3
     58        GF_SCNFILES = 1 << 3,
     59
     60        // The GF_USE_?FLAGS values specify how many country flags are displayed
     61        // in the subtitles options dialog.
     62        // None of these defined -> 1 language, in ENGLISH.TXT
     63        GF_USE_3FLAGS = 1 << 4, // French, German, Spanish
     64        GF_USE_4FLAGS = 1 << 5, // French, German, Italian, Spanish
     65        GF_USE_5FLAGS = 1 << 6  // All 5 flags
    5966};
    6067
    6168enum TinselEngineVersion {
  • engines/tinsel/detection.cpp

     
    130130                TINSEL_V1,
    131131        },
    132132
     133        {       // Multilingual CD with english speech and *.gra files.
     134                // Note: It contains no english subtitles.
     135                {
     136                        "dw",
     137                        "CD",
     138                        {
     139                                {"dw.gra", 0, "c8808ccd988d603dd35dff42013ae7fd", 781656},
     140                                {"english.smp", 0, NULL, -1},
     141                                {"french.txt", 0, NULL, -1},
     142                                {"german.txt", 0, NULL, -1},
     143                                {"italian.txt", 0, NULL, -1},
     144                                {"spanish.txt", 0, NULL, -1},
     145                                {NULL, 0, NULL, 0}
     146                        },
     147                        Common::UNK_LANG,
     148                        Common::kPlatformPC,
     149                        Common::ADGF_NO_FLAGS
     150                },
     151                GID_DW1,
     152                0,
     153                GF_CD | GF_USE_4FLAGS,
     154                TINSEL_V1,
     155        },
     156
    133157        {       // English CD with SCN files
    134158                {
    135159                        "dw",