diff options
author | Eugene Sandulenko | 2005-01-14 01:17:34 +0000 |
---|---|---|
committer | Eugene Sandulenko | 2005-01-14 01:17:34 +0000 |
commit | ccacf6f82e5c5e112ef165d45233359d8a654407 (patch) | |
tree | 2df9f49bb5f44a6e0d01a6cfa56bf68bbfc317ee | |
parent | 211ec4c32a779ab6a234a64e33eaedd3c64b9822 (diff) | |
download | scummvm-rg350-ccacf6f82e5c5e112ef165d45233359d8a654407.tar.gz scummvm-rg350-ccacf6f82e5c5e112ef165d45233359d8a654407.tar.bz2 scummvm-rg350-ccacf6f82e5c5e112ef165d45233359d8a654407.zip |
o Added support for German ITE. There are also Puzzle-related messages
hardcoded, but I'll save that for later :)
o Eliminated all leftovers of previous language loader. If you'll spot another
one, just remove it silently.
svn-id: r16556
-rw-r--r-- | saga/game.cpp | 31 | ||||
-rw-r--r-- | saga/ite_introproc.cpp | 192 | ||||
-rw-r--r-- | saga/saga.cpp | 66 | ||||
-rw-r--r-- | saga/saga.h | 6 | ||||
-rw-r--r-- | saga/scene.h | 2 |
5 files changed, 159 insertions, 138 deletions
diff --git a/saga/game.cpp b/saga/game.cpp index 5eb2cc5a0f..4c8aebcff8 100644 --- a/saga/game.cpp +++ b/saga/game.cpp @@ -689,37 +689,6 @@ int SagaEngine::initGame(void) { warning("Error loading game resource files."); return FAILURE; } - // Load dialogue file - loadLanguage(); - - return SUCCESS; -} - -int SagaEngine::loadLanguage(void) { - char lang_file[MAXPATH]; - File test_file; - - - if (getGameType() == GType_ITE) { - snprintf(lang_file, MAXPATH, "%s%s.%s", GAME_ITE_LANG_PREFIX, _gameLanguage, GAME_LANG_EXT); - if (!test_file.open(lang_file)) { - debug(0, "Couldn't open language file %s. Using default (US English)", lang_file); - return SUCCESS; - } - - test_file.close(); - - if (_vm->_scene->ITEIntroRegisterLang() != SUCCESS) { - warning("Error registering intro sequence language cvars"); - return FAILURE; - } - - debug(0, "Using language file %s.", lang_file); - // FIXME - //CFG_Read(lang_path); - } else { - debug(0, "Language support for this game not implemented."); - } return SUCCESS; } diff --git a/saga/ite_introproc.cpp b/saga/ite_introproc.cpp index 76e66a1281..1e3f6e1aa2 100644 --- a/saga/ite_introproc.cpp +++ b/saga/ite_introproc.cpp @@ -40,8 +40,8 @@ namespace Saga { -static INTRO_DIALOGUE IntroDiag[] = { - { +static INTRO_DIALOGUE IntroDiag[][14] = { + { { RID_CAVE_VOICE_0, "intro1a", "We see the sky, we see the land, we see the water, " "and we wonder: Are we the only ones?" @@ -105,7 +105,71 @@ static INTRO_DIALOGUE IntroDiag[] = { { RID_CAVE_VOICE_13, "intro4d", "And will we also share the same fate one day?" + } }, + + // German + { { + RID_CAVE_VOICE_0, "intro1a", + "Um uns sind der Himmel, das Land und die Seen; und wir " + "fragen uns - sind wir die einzigen?" }, + { + RID_CAVE_VOICE_1, "intro2a", + "Lange vor unserer Zeit herrschten die Menschen \201ber die Erde." + }, + { + RID_CAVE_VOICE_2, "intro3a", + "Sie taten wundersame Dinge und versetzten ganze Berge." + }, + { + RID_CAVE_VOICE_3, "intro4a", + "Sie kannten das Geheimnis des Fluges, das Geheimnis der Fr\224hlichkeit " + "und andere Geheimnisse, die unsere Vorstellungskraft \201bersteigen." + }, + { + RID_CAVE_VOICE_4, "intro1b", + "Au$erdem kannten die Menschen das Geheimnis des Lebens. Und sie nutzten " + "es, um uns die vier gro$en Geschenke zu geben -" + }, + { + RID_CAVE_VOICE_5, "intro2b", + "den denkenden Geist, das f\201hlende Herz, den sprechenden Mund und die " + "greifende Hand." + }, + { + RID_CAVE_VOICE_6, "intro3b", + "Wir sind ihre Kinder." + }, + { + RID_CAVE_VOICE_7, "intro1c", + "Sie lehrten uns zu sprechen und unsere H\204nde zu benutzen." + }, + { + RID_CAVE_VOICE_8, "intro2c", + "Sie zeigten uns die Freude am Denken." + }, + { + RID_CAVE_VOICE_9, "intro3c", + "Sie liebten uns, und w\204ren wir bereit gewesen, h\204tten sie " + "uns sicherlich das Geheimnis der Fr\224hlichkeit offenbart." + }, + { + RID_CAVE_VOICE_10, "intro1d", + "Und nun sehen wir den Himmel, das Land und die Seen - unser Erbe. " + "Und wir fragen uns - warum verschwanden sie?" + }, + { + RID_CAVE_VOICE_11, "intro2d", + "Leben sie noch in den Sternen? In den Tiefen des Ozeans? Im Wind?" + }, + { + RID_CAVE_VOICE_12, "intro3d", + "Wir fragen uns - war ihr Schicksal gut oder b\224se?" + }, + { + RID_CAVE_VOICE_13, "intro4d", + "Und wird uns eines Tages das gleiche Schicksal ereilen?" + } } }; SCENE_QUEUE ITE_IntroList[] = { @@ -147,35 +211,21 @@ int Scene::ITEStartProc() { return SUCCESS; } -int Scene::ITEIntroRegisterLang() { -#if 0 - size_t i; - - for (i = 0; i < ARRAYSIZE(IntroDiag); i++) { - if (CVAR_Register_S(IntroDiag[i].i_str, - IntroDiag[i].i_cvar_name, - NULL, CVAR_CFG, INTRO_STRMAX) != SUCCESS) { - warning("Error registering intro text cvars"); - return FAILURE; - } - } -#endif - - return SUCCESS; -} - enum { kCHeader, kCText }; enum { - kITEPC = (1 << 0), - kITEPCCD = (1 << 1), - kITEMac = (1 << 2), - kITEWyrmKeep = (1 << 3), - kITEAny = 0xffff, - kITENotWyrmKeep = kITEAny & ~kITEWyrmKeep + kITEPC = (1 << 0), + kITEPCCD = (1 << 1), + kITEMac = (1 << 2), + kITEWyrmKeep = (1 << 3), + kITEDe = (1 << 4), + kITEAny = 0xffff, + kITENotWyrmKeep = kITEAny & ~kITEWyrmKeep, + kITENotDe = kITEAny & ~kITEDe, + kITENotDeNotWyrm = kITENotWyrmKeep & ~kITEDe }; #define INV(n) (kITEAny & ~(n)) @@ -189,7 +239,9 @@ EVENT *Scene::ITEQueueCredits(SCENE_INFO *scene_info, int delta_time, int durati // The assumption here is that all WyrmKeep versions have the same // credits, regardless of which operating system they're for. - if (_vm->getFeatures() & GF_WYRMKEEP) { + if (_vm->getFeatures() & GF_LANG_DE) { + game = kITEDe; + } else if (_vm->getFeatures() & GF_WYRMKEEP) { game = kITEWyrmKeep; } else if (_vm->getFeatures() & GF_MAC_RESOURCES) { game = kITEMac; @@ -389,6 +441,7 @@ int Scene::ITEIntroCave1Proc(int param, SCENE_INFO *scene_info) { TEXTLIST_ENTRY *entry_p; int i; int font_flags = FONT_OUTLINE | FONT_CENTERED; + int lang = _vm->getFeatures() & GF_LANG_DE ? 1 : 0; switch (param) { case SCENE_BEGIN: @@ -404,12 +457,13 @@ int Scene::ITEIntroCave1Proc(int param, SCENE_INFO *scene_info) { text_entry.color = 255; text_entry.effect_color = 0; text_entry.text_x = 320 / 2; - text_entry.text_y = INTRO_CAPTION_Y; + text_entry.text_y = _vm->getFeatures() & GF_LANG_DE ? INTRO_DE_CAPTION_Y : + INTRO_CAPTION_Y; text_entry.font_id = MEDIUM_FONT_ID; text_entry.flags = font_flags; for (i = INTRO_CAVE1_START; i < INTRO_CAVE1_END; i++) { - text_entry.string = IntroDiag[i].i_str; + text_entry.string = IntroDiag[lang][i].i_str; entry_p = _vm->textAddEntry(scene_info->text_list, &text_entry); // Display text @@ -425,14 +479,14 @@ int Scene::ITEIntroCave1Proc(int param, SCENE_INFO *scene_info) { event.type = ONESHOT_EVENT; event.code = VOICE_EVENT; event.op = EVENT_PLAY; - event.param = IntroDiag[i].i_voice_rn; + event.param = IntroDiag[lang][i].i_voice_rn; event.time = event_time; q_event = _vm->_events->chain(q_event, &event); - voice_len = _vm->_sndRes->getVoiceLength(IntroDiag[i].i_voice_rn); + voice_len = _vm->_sndRes->getVoiceLength(IntroDiag[lang][i].i_voice_rn); if (voice_len < 0) { - voice_len = strlen(IntroDiag[i].i_str) * VOICE_LETTERLEN; + voice_len = strlen(IntroDiag[lang][i].i_str) * VOICE_LETTERLEN; } // Remove text @@ -481,6 +535,7 @@ int Scene::ITEIntroCave2Proc(int param, SCENE_INFO *scene_info) { TEXTLIST_ENTRY *entry_p; int i; int font_flags = FONT_OUTLINE | FONT_CENTERED; + int lang = _vm->getFeatures() & GF_LANG_DE ? 1 : 0; switch (param) { case SCENE_BEGIN: @@ -505,12 +560,13 @@ int Scene::ITEIntroCave2Proc(int param, SCENE_INFO *scene_info) { text_entry.color = 255; text_entry.effect_color = 0; text_entry.text_x = 320 / 2; - text_entry.text_y = INTRO_CAPTION_Y; + text_entry.text_y = _vm->getFeatures() & GF_LANG_DE ? INTRO_DE_CAPTION_Y : + INTRO_CAPTION_Y; text_entry.font_id = MEDIUM_FONT_ID; text_entry.flags = font_flags; for (i = INTRO_CAVE2_START; i < INTRO_CAVE2_END; i++) { - text_entry.string = IntroDiag[i].i_str; + text_entry.string = IntroDiag[lang][i].i_str; entry_p = _vm->textAddEntry(scene_info->text_list, &text_entry); // Display text @@ -526,14 +582,14 @@ int Scene::ITEIntroCave2Proc(int param, SCENE_INFO *scene_info) { event.type = ONESHOT_EVENT; event.code = VOICE_EVENT; event.op = EVENT_PLAY; - event.param = IntroDiag[i].i_voice_rn; + event.param = IntroDiag[lang][i].i_voice_rn; event.time = event_time; q_event = _vm->_events->chain(q_event, &event); - voice_len = _vm->_sndRes->getVoiceLength(IntroDiag[i].i_voice_rn); + voice_len = _vm->_sndRes->getVoiceLength(IntroDiag[lang][i].i_voice_rn); if (voice_len < 0) { - voice_len = strlen(IntroDiag[i].i_str) * VOICE_LETTERLEN; + voice_len = strlen(IntroDiag[lang][i].i_str) * VOICE_LETTERLEN; } // Remove text @@ -581,6 +637,7 @@ int Scene::ITEIntroCave3Proc(int param, SCENE_INFO *scene_info) { TEXTLIST_ENTRY *entry_p; int i; int font_flags = FONT_OUTLINE | FONT_CENTERED; + int lang = _vm->getFeatures() & GF_LANG_DE ? 1 : 0; switch (param) { case SCENE_BEGIN: @@ -605,12 +662,13 @@ int Scene::ITEIntroCave3Proc(int param, SCENE_INFO *scene_info) { text_entry.color = 255; text_entry.effect_color = 0; text_entry.text_x = 320 / 2; - text_entry.text_y = INTRO_CAPTION_Y; + text_entry.text_y = _vm->getFeatures() & GF_LANG_DE ? INTRO_DE_CAPTION_Y : + INTRO_CAPTION_Y; text_entry.font_id = MEDIUM_FONT_ID; text_entry.flags = font_flags; for (i = INTRO_CAVE3_START; i < INTRO_CAVE3_END; i++) { - text_entry.string = IntroDiag[i].i_str; + text_entry.string = IntroDiag[lang][i].i_str; entry_p = _vm->textAddEntry(scene_info->text_list, &text_entry); // Display text @@ -626,14 +684,14 @@ int Scene::ITEIntroCave3Proc(int param, SCENE_INFO *scene_info) { event.type = ONESHOT_EVENT; event.code = VOICE_EVENT; event.op = EVENT_PLAY; - event.param = IntroDiag[i].i_voice_rn; + event.param = IntroDiag[lang][i].i_voice_rn; event.time = event_time; q_event = _vm->_events->chain(q_event, &event); - voice_len = _vm->_sndRes->getVoiceLength(IntroDiag[i].i_voice_rn); + voice_len = _vm->_sndRes->getVoiceLength(IntroDiag[lang][i].i_voice_rn); if (voice_len < 0) { - voice_len = strlen(IntroDiag[i].i_str) * VOICE_LETTERLEN; + voice_len = strlen(IntroDiag[lang][i].i_str) * VOICE_LETTERLEN; } // Remove text @@ -682,6 +740,7 @@ int Scene::ITEIntroCave4Proc(int param, SCENE_INFO *scene_info) { TEXTLIST_ENTRY *entry_p; int i; int font_flags = FONT_OUTLINE | FONT_CENTERED; + int lang = _vm->getFeatures() & GF_LANG_DE ? 1 : 0; switch (param) { case SCENE_BEGIN: @@ -706,12 +765,13 @@ int Scene::ITEIntroCave4Proc(int param, SCENE_INFO *scene_info) { text_entry.color = 255; text_entry.effect_color = 0; text_entry.text_x = 320 / 2; - text_entry.text_y = INTRO_CAPTION_Y; + text_entry.text_y = _vm->getFeatures() & GF_LANG_DE ? INTRO_DE_CAPTION_Y : + INTRO_CAPTION_Y; text_entry.font_id = MEDIUM_FONT_ID; text_entry.flags = font_flags; for (i = INTRO_CAVE4_START; i < INTRO_CAVE4_END; i++) { - text_entry.string = IntroDiag[i].i_str; + text_entry.string = IntroDiag[lang][i].i_str; entry_p = _vm->textAddEntry(scene_info->text_list, &text_entry); // Display text @@ -727,14 +787,14 @@ int Scene::ITEIntroCave4Proc(int param, SCENE_INFO *scene_info) { event.type = ONESHOT_EVENT; event.code = VOICE_EVENT; event.op = EVENT_PLAY; - event.param = IntroDiag[i].i_voice_rn; + event.param = IntroDiag[lang][i].i_voice_rn; event.time = event_time; q_event = _vm->_events->chain(q_event, &event); - voice_len = _vm->_sndRes->getVoiceLength(IntroDiag[i].i_voice_rn); + voice_len = _vm->_sndRes->getVoiceLength(IntroDiag[lang][i].i_voice_rn); if (voice_len < 0) { - voice_len = strlen(IntroDiag[i].i_str) * VOICE_LETTERLEN; + voice_len = strlen(IntroDiag[lang][i].i_str) * VOICE_LETTERLEN; } // Remove text @@ -778,12 +838,15 @@ int Scene::ITEIntroValleyProc(int param, SCENE_INFO *scene_info) { EVENT *q_event; const INTRO_CREDIT credits[] = { - {kITEAny, kCHeader, "Producer"}, + {kITENotDe, kCHeader, "Producer"}, + {kITEDe, kCHeader, "Produzent"}, {kITEAny, kCText, "Walter Hochbrueckner"}, - {kITEAny, kCHeader, "Executive Producer"}, + {kITENotDe, kCHeader, "Executive Producer"}, + {kITEDe, kCHeader, "Ausf\201hrender Produzent"}, {kITEAny, kCText, "Robert McNally"}, {kITEWyrmKeep, kCHeader, "2nd Executive Producer"}, {kITENotWyrmKeep, kCHeader, "Publisher"}, + {kITENotDeNotWyrm, kCHeader, "Herausgeber"}, {kITEAny, kCText, "Jon Van Caneghem"} }; @@ -881,11 +944,15 @@ int Scene::ITEIntroTreeHouseProc(int param, SCENE_INFO *scene_info) { EVENT *q_event; const INTRO_CREDIT credits1[] = { - {kITEAny, kCHeader, "Game Design"}, + {kITENotDe, kCHeader, "Game Design"}, + {kITEDe, kCHeader, "Spielentwurf"}, {kITEAny, kCText, "Talin, Joe Pearce, Robert McNally"}, - {kITEAny, kCText, "and Carolly Hauksdottir"}, - {kITEAny, kCHeader, "Screenplay and Dialog"}, - {kITEAny, kCText, "Robert Leh, Len Wein, and Bill Rotsler"} + {kITENotDe, kCText, "and Carolly Hauksdottir"}, + {kITEDe, kCText, "und Carolly Hauksdottir"}, + {kITENotDe, kCHeader, "Screenplay and Dialog"}, + {kITEDe, kCHeader, "Geschichte und Dialoge"}, + {kITENotDe, kCText, "Robert Leh, Len Wein, and Bill Rotsler"}, + {kITEDe, kCText, "Robert Leh, Len Wein und Bill Rotsler"} }; int n_credits1 = ARRAYSIZE(credits1); @@ -893,13 +960,16 @@ int Scene::ITEIntroTreeHouseProc(int param, SCENE_INFO *scene_info) { const INTRO_CREDIT credits2[] = { {kITEWyrmKeep, kCHeader, "Art Direction"}, {kITEWyrmKeep, kCText, "Allison Hershey"}, - {kITEAny, kCHeader, "Art"}, + {kITENotDe, kCHeader, "Art"}, + {kITEDe, kCHeader, "Grafiken"}, {kITEAny, kCText, "Edward Lacabanne, Glenn Price, April Lee,"}, {kITEWyrmKeep, kCText, "Lisa Sample, Brian Dowrick, Reed Waller,"}, {kITEWyrmKeep, kCText, "Allison Hershey and Talin"}, {kITENotWyrmKeep, kCText, "Lisa Iennaco, Brian Dowrick, Reed"}, - {kITENotWyrmKeep, kCText, "Waller, Allison Hershey and Talin"}, - {kITENotWyrmKeep, kCHeader, "Art Direction"}, + {kITENotDeNotWyrm, kCText, "Waller, Allison Hershey and Talin"}, + {kITEDe, kCText, "Waller, Allison Hershey und Talin"}, + {kITENotDeNotWyrm, kCHeader, "Art Direction"}, + {kITEDe, kCHeader, "Grafische Leitung"}, {kITENotWyrmKeep, kCText, "Allison Hershey"} }; @@ -959,21 +1029,25 @@ int Scene::ITEIntroFairePathProc(int param, SCENE_INFO *scene_info) { EVENT *q_event; const INTRO_CREDIT credits1[] = { - {kITEAny, kCHeader, "Programming"}, + {kITENotDe, kCHeader, "Programming"}, + {kITEDe, kCHeader, "Programmiert von"}, {kITEAny, kCText, "Talin, Walter Hochbrueckner,"}, - {kITEAny, kCText, "Joe Burks and Robert Wiggins"}, + {kITENotDe, kCText, "Joe Burks and Robert Wiggins"}, + {kITEDe, kCText, "Joe Burks und Robert Wiggins"}, {kITEPCCD | kITEWyrmKeep, kCHeader, "Additional Programming"}, {kITEPCCD | kITEWyrmKeep, kCText, "John Bolton"}, {kITEMac, kCHeader, "Macintosh Version"}, {kITEMac, kCText, "Michael McNally and Robert McNally"}, - {kITEAny, kCHeader, "Music and Sound"}, + {kITENotDe, kCHeader, "Music and Sound"}, + {kITEDe, kCHeader, "Musik und Sound"}, {kITEAny, kCText, "Matt Nathan"} }; int n_credits1 = ARRAYSIZE(credits1); const INTRO_CREDIT credits2[] = { - {kITEAny, kCHeader, "Directed by"}, + {kITENotDe, kCHeader, "Directed by"}, + {kITEDe, kCHeader, "Regie"}, {kITEAny, kCText, "Talin"} }; diff --git a/saga/saga.cpp b/saga/saga.cpp index bd7a68db4b..4b380fe72b 100644 --- a/saga/saga.cpp +++ b/saga/saga.cpp @@ -60,46 +60,28 @@ static const GameSettings saga_games[] = { {0, 0, 0} }; -static const char *englishTextStrings[] = { - "Walk to", - "Look At", - "Pick Up", - "Talk to", - "Open", - "Close", - "Use", - "Give", - "Options", - "Test", - "Demo", - "Help", - "Quit Game", - "Fast", - "Slow", - "On", - "Off", - "Continue Playing", - "Load", - "Save", - "Game Options", - "Reading Speed", - "Music", - "Sound", - "Cancel", - "Quit", - "OK", - "Mid", - "Click", - "10%", - "20%", - "30%", - "40%", - "50%", - "60%", - "70%", - "80%", - "90%", - "Max" +static const char *interfaceTextStrings[][39] = { + { + "Walk to", "Look At", "Pick Up", "Talk to", "Open", + "Close", "Use", "Give", "Options", "Test", + "Demo", "Help", "Quit Game", "Fast", "Slow", + "On", "Off", "Continue Playing", "Load", "Save", + "Game Options", "Reading Speed", "Music", "Sound", "Cancel", + "Quit", "OK", "Mid", "Click", + "10%", "20%", "30%", "40%", "50%", + "60%", "70%", "80%", "90%", "Max" + }, + // German + { + "Gehe zu", "Schau an", "Nimm", "Rede mit", "\231ffne", + "Schlie$e", "Benutze", "Gib", "Optionen", "Test", + "Demo", "Hilfe", "Spiel beenden", "S", "L", + "An", "Aus", "Weiterspielen", "Laden", "Sichern", + "Spieleoptionen", "Lesegeschw.", "Musik", "Sound", "Abbr.", + "Beenden", "OK", "M", "Klick", + "10%", "20%", "30%", "40%", "50%", + "60%", "70%", "80%", "90%", "Max" + } }; GameList Engine_SAGA_gameList() { @@ -377,7 +359,9 @@ const char *SagaEngine::getObjectName(uint16 objectId) { const char *SagaEngine::getTextString(int textStringId) { - return englishTextStrings[textStringId]; //TODO: i18n + int lang = _vm->getFeatures() & GF_LANG_DE ? 1 : 0; + + return interfaceTextStrings[lang][textStringId]; } } // End of namespace Saga diff --git a/saga/saga.h b/saga/saga.h index e1ac0a17cf..be0bc3f0e2 100644 --- a/saga/saga.h +++ b/saga/saga.h @@ -60,10 +60,6 @@ class Console; class Events; class PalAnim; -#define GAME_LANGSTR_LIMIT 3 -#define GAME_ITE_LANG_PREFIX "ite_" -#define GAME_LANG_EXT "lng" - #define MIN_IMG_RLECODE 3 #define MODEX_SCANLINE_LIMIT 200 @@ -462,7 +458,6 @@ public: Point _mousePos; bool _quit; - char _gameLanguage[GAME_LANGSTR_LIMIT]; RSCFILE_CONTEXT **_gameFileContexts; //current game description @@ -497,7 +492,6 @@ public: const char *getTextString(int textStringId); private: - int loadLanguage(void); int loadGame(int gameNumber); }; diff --git a/saga/scene.h b/saga/scene.h index 5a26158ec9..0fcb2c42a2 100644 --- a/saga/scene.h +++ b/saga/scene.h @@ -160,6 +160,7 @@ typedef Common::List<SCENE_QUEUE> SceneQueueList; #define ITE_INTRO_FRAMETIME 90 #define INTRO_CAPTION_Y 170 +#define INTRO_DE_CAPTION_Y 160 #define VOICE_PAD 50 #define VOICE_LETTERLEN 90 @@ -303,7 +304,6 @@ class Scene { int IHNMHateProc(int param, SCENE_INFO *scene_info); public: - int ITEIntroRegisterLang(void); static int SC_ITEIntroAnimProc(int param, SCENE_INFO *scene_info, void *refCon); static int SC_ITEIntroCave1Proc(int param, SCENE_INFO *scene_info, void *refCon); static int SC_ITEIntroCave2Proc(int param, SCENE_INFO *scene_info, void *refCon); |