diff options
author | Paul Gilbert | 2015-06-26 21:34:37 -0400 |
---|---|---|
committer | Paul Gilbert | 2015-06-26 21:34:37 -0400 |
commit | 9eb168583fb1a6b2464cf856adc4888d6b396f35 (patch) | |
tree | 999467380f23415bf8c56ec49c954ebcc4aa2667 /engines | |
parent | 47a3080af2ec686957ee813a309fb7704bd31dd8 (diff) | |
download | scummvm-rg350-9eb168583fb1a6b2464cf856adc4888d6b396f35.tar.gz scummvm-rg350-9eb168583fb1a6b2464cf856adc4888d6b396f35.tar.bz2 scummvm-rg350-9eb168583fb1a6b2464cf856adc4888d6b396f35.zip |
SHERLOCK: Split FixedText into separate descendents for each game
Diffstat (limited to 'engines')
-rw-r--r-- | engines/sherlock/fixed_text.cpp | 356 | ||||
-rw-r--r-- | engines/sherlock/fixed_text.h | 77 | ||||
-rw-r--r-- | engines/sherlock/journal.cpp | 3 | ||||
-rw-r--r-- | engines/sherlock/module.mk | 2 | ||||
-rw-r--r-- | engines/sherlock/scalpel/scalpel.cpp | 3 | ||||
-rw-r--r-- | engines/sherlock/scalpel/scalpel_fixed_text.cpp | 377 | ||||
-rw-r--r-- | engines/sherlock/scalpel/scalpel_fixed_text.h | 108 | ||||
-rw-r--r-- | engines/sherlock/scalpel/scalpel_inventory.cpp | 1 | ||||
-rw-r--r-- | engines/sherlock/scalpel/scalpel_journal.cpp | 1 | ||||
-rw-r--r-- | engines/sherlock/scalpel/scalpel_talk.cpp | 1 | ||||
-rw-r--r-- | engines/sherlock/scalpel/scalpel_user_interface.cpp | 1 | ||||
-rw-r--r-- | engines/sherlock/sherlock.cpp | 2 | ||||
-rw-r--r-- | engines/sherlock/tattoo/tattoo_fixed_text.cpp | 51 | ||||
-rw-r--r-- | engines/sherlock/tattoo/tattoo_fixed_text.h | 60 | ||||
-rw-r--r-- | engines/sherlock/tattoo/widget_verbs.cpp | 13 |
15 files changed, 632 insertions, 424 deletions
diff --git a/engines/sherlock/fixed_text.cpp b/engines/sherlock/fixed_text.cpp index 09e38bfb5d..cbee944120 100644 --- a/engines/sherlock/fixed_text.cpp +++ b/engines/sherlock/fixed_text.cpp @@ -22,359 +22,17 @@ #include "sherlock/sherlock.h" #include "sherlock/fixed_text.h" +#include "sherlock/scalpel/scalpel_fixed_text.h" +#include "sherlock/tattoo/tattoo_fixed_text.h" namespace Sherlock { -static const char *const fixedTextEN[] = { - // SH1: Window buttons - "Exit", - "Up", - "Down", - // SH1: Inventory buttons - "Exit", - "Look", - "Use", - "Give", - // SH1: Journal text - "Watson's Journal", - "Page %d", - // SH1: Journal buttons - "Exit", - "Back 10", - "Up", - "Down", - "Ahead 10", - "Search", - "First Page", - "Last Page", - "Print Text", - // SH1: Journal search - "Exit", - "Backward", - "Forward", - "Text Not Found !", - // SH1: Initial Inventory - "A message requesting help", - "A number of business cards", - "Opera Tickets", - "Cuff Link", - "Wire Hook", - "Note", - "An open pocket watch", - "A piece of paper with numbers on it", - "A letter folded many times", - "Tarot Cards", - "An ornate key", - "A pawn ticket", - // SH2: Verbs - "Open", - "Look", - "Talk", - "Journal" -}; - -// sharp-s : 0xE1 / octal 341 -// small a-umlaut: 0x84 / octal 204 -// small o-umlaut: 0x94 / octal 224 -// small u-umlaut: 0x81 / octal 201 -static const char *const fixedTextDE[] = { - // SH1: Window buttons - "Zur\201ck", - "Hoch", - "Runter", - // SH1: Inventory buttons - "Zur\201ck", - "Schau", - "Benutze", - "Gib", - // SH1: Journal text - "Watsons Tagebuch", - "Seite %d", - // SH1: Journal buttons - "Zur\201ck", - "10 hoch", - "Hoch", - "Runter", - "10 runter", - "Suche", - "Erste Seite", - "Letzte Seite", - "Drucke Text", - // SH1: Journal search - "Zur\201ck", - "R\201ckw\204rts", // original: "Backward" - "Vorw\204rts", // original: "Forward" - "Text nicht gefunden!", - // SH1: Initial Inventory - "Ein Hilferuf von Lestrade", - "Holmes' Visitenkarten", - "Karten f\201rs Opernhaus", - "Manschettenkn\224pfe", - "Zum Haken verbogener Drahtkorb", - "Mitteilung am Epstein", - "Eine offene Taschenuhr", - "Ein Zettel mit Zahlen drauf", - "Ein mehrfach gefalteter Briefbogen", - "Ein Tarock-Kartenspiel", // [sic] - "Ein verzierter Schl\201ssel", - "Ein Pfandschein", - // SH2: Verbs - "\231ffne", - "Schau", - "Rede", - "Tagebuch" -}; - -// up-side down exclamation mark - 0xAD / octal 255 -// up-side down question mark - 0xA8 / octal 250 -// n with a wave on top - 0xA4 / octal 244 -static const char *const fixedTextES[] = { - // SH1: Window buttons - "Exit", - "Subir", - "Bajar", - // SH1: Inventory buttons - "Exit", - "Mirar", - "Usar", - "Dar", - // SH1: Journal text - "Diario de Watson", - "Pagina %d", - // SH1: Journal buttons - "Exit", - "Retroceder", - "Subir", - "baJar", - "Adelante", - "Buscar", - "1a pagina", - "Ult pagina", - "Imprimir", - // SH1: Journal search - "Exit", - "Retroceder", - "Avanzar", - "Texto no encontrado!", - // SH1: Initial Inventory - "Un mensaje solicitando ayuda", - "Unas cuantas tarjetas de visita", - "Entradas para la opera", - "Unos gemelos", - "Un gancho de alambre", - "Una nota", - "Un reloj de bolsillo abierto", - "Un trozo de papel con unos numeros", - "Un carta muy plegada", - "Unas cartas de Tarot", - "Una llave muy vistosa", - "Una papeleta de empe\244o", - // SH2: Verbs --- TODO: not known at the moment - "Open", - "Look", - "Talk", - "Journal" -}; - -// ========================================= - -// === Sherlock Holmes 1: Serrated Scalpel === -static const char *const fixedTextEN_ActionOpen[] = { - "This cannot be opened", - "It is already open", - "It is locked", - "Wait for Watson", - " ", - "." -}; - -static const char *const fixedTextDE_ActionOpen[] = { - "Das kann man nicht \224ffnen", - "Ist doch schon offen!", - "Leider verschlossen", - "Warte auf Watson", - " ", - "." -}; - -static const char *const fixedTextES_ActionOpen[] = { - "No puede ser abierto", - "Ya esta abierto", - "Esta cerrado", - "Espera a Watson", - " ", - "." -}; - -static const char *const fixedTextEN_ActionClose[] = { - "This cannot be closed", - "It is already closed", - "The safe door is in the way" -}; - -static const char *const fixedTextDE_ActionClose[] = { - "Das kann man nicht schlie\341en", - "Ist doch schon zu!", - "Die safet\201r ist Weg" -}; - -static const char *const fixedTextES_ActionClose[] = { - "No puede ser cerrado", - "Ya esta cerrado", - "La puerta de seguridad esta entre medias" -}; - -static const char *const fixedTextEN_ActionMove[] = { - "This cannot be moved", - "It is bolted to the floor", - "It is too heavy", - "The other crate is in the way" -}; - - -static const char *const fixedTextDE_ActionMove[] = { - "L\204\341t sich nicht bewegen", - "Festged\201belt in der Erde...", - "Oha, VIEL zu schwer", - "Der andere Kiste ist im Weg" // [sic] -}; - -static const char *const fixedTextES_ActionMove[] = { - "No puede moverse", - "Esta sujeto a la pared", - "Es demasiado pesado", - "El otro cajon esta en mitad" -}; - -static const char *const fixedTextEN_ActionPick[] = { - "Nothing of interest here", - "It is bolted down", - "It is too big to carry", - "It is too heavy", - "I think a girl would be more your type", - "Those flowers belong to Penny", - "She's far too young for you!", - "I think a girl would be more your type!", - "Government property for official use only" -}; - -static const char *const fixedTextDE_ActionPick[] = { - "Nichts Interessantes da", - "Zu gut befestigt", - "Ist ja wohl ein bi\341chen zu gro\341, oder ?", - "Oha, VIEL zu schwer", - "Ich denke, Du stehst mehr auf M\204dchen ?", - "Diese Blumen geh\224ren Penny", - "Sie ist doch viel zu jung f\201r Dich!", - "Ich denke, Du stehst mehr auf M\204dchen ?", - "Staatseigentum - Nur für den Dienstgebrauch !" -}; - -static const char *const fixedTextES_ActionPick[] = { - "No hay nada interesante", - "Esta anclado al suelo", - "Es muy grande para llevarlo", - "Pesa demasiado", - "Creo que una chica sera mas tu tipo", - "Esas flores pertenecen a Penny", - "\255Es demasiado joven para ti!" - "\255Creo que una chica sera mas tu tipo!", - "Propiedad del gobierno para uso oficial" -}; - -static const char *const fixedTextEN_ActionUse[] = { - "You can't do that", - "It had no effect", - "You can't reach it", - "OK, the door looks bigger! Happy?" - "Doors don't smoke" -}; - -static const char *const fixedTextDE_ActionUse[] = { - "Nein, das geht wirklich nicht", - "Tja keinerlei Wirkung", - "Da kommst du nicht dran", - "Na gut, die Tür sieht jetzt gr\224\341er aus. Zufrieden?" - "Türen sind Nichtraucher!" -}; - -static const char *const fixedTextES_ActionUse[] = { - "No puedes hacerlo", - "No tuvo ningun efecto", - "No puedes alcanzarlo", - "Bien, \255es enorme! \250Feliz?" - "Las puertas no fuman" -}; - -#define FIXEDTEXT_GETCOUNT(_name_) sizeof(_name_) / sizeof(byte *) -#define FIXEDTEXT_ENTRY(_name_) _name_, FIXEDTEXT_GETCOUNT(_name_) - -static const FixedTextActionEntry fixedTextEN_Actions[] = { - { FIXEDTEXT_ENTRY(fixedTextEN_ActionOpen) }, - { FIXEDTEXT_ENTRY(fixedTextEN_ActionClose) }, - { FIXEDTEXT_ENTRY(fixedTextEN_ActionMove) }, - { FIXEDTEXT_ENTRY(fixedTextEN_ActionPick) }, - { FIXEDTEXT_ENTRY(fixedTextEN_ActionUse) } -}; - -static const FixedTextActionEntry fixedTextDE_Actions[] = { - { FIXEDTEXT_ENTRY(fixedTextDE_ActionOpen) }, - { FIXEDTEXT_ENTRY(fixedTextDE_ActionClose) }, - { FIXEDTEXT_ENTRY(fixedTextDE_ActionMove) }, - { FIXEDTEXT_ENTRY(fixedTextDE_ActionPick) }, - { FIXEDTEXT_ENTRY(fixedTextDE_ActionUse) } -}; - -static const FixedTextActionEntry fixedTextES_Actions[] = { - { FIXEDTEXT_ENTRY(fixedTextES_ActionOpen) }, - { FIXEDTEXT_ENTRY(fixedTextES_ActionClose) }, - { FIXEDTEXT_ENTRY(fixedTextES_ActionMove) }, - { FIXEDTEXT_ENTRY(fixedTextES_ActionPick) }, - { FIXEDTEXT_ENTRY(fixedTextES_ActionUse) } -}; - -// ========================================= - -// TODO: -// It seems there was a French version of Sherlock Holmes 2 -static const FixedTextLanguageEntry fixedTextLanguages[] = { - { Common::DE_DEU, fixedTextDE, fixedTextDE_Actions }, - { Common::ES_ESP, fixedTextES, fixedTextES_Actions }, - { Common::EN_ANY, fixedTextEN, fixedTextEN_Actions }, - { Common::UNK_LANG, fixedTextEN, fixedTextEN_Actions } -}; - -// ========================================= - -// ========================================= - -// TODO: split this class up into 2 classes. One for each Sherlock Holmes game -// We definitely do not want to share fixed text between both, simply because translations may not be the same -FixedText::FixedText(SherlockEngine *vm) : _vm(vm) { - // Figure out which fixed texts to use - Common::Language curLanguage = _vm->getLanguage(); - - const FixedTextLanguageEntry *curLanguageEntry = fixedTextLanguages; - - while (curLanguageEntry->language != Common::UNK_LANG) { - if (curLanguageEntry->language == curLanguage) - break; // found current language - curLanguageEntry++; - } - _curLanguageEntry = curLanguageEntry; +FixedText *FixedText::init(SherlockEngine *vm) { + if (vm->getGameID() == GType_SerratedScalpel) + return new Scalpel::ScalpelFixedText(vm); + else + return new Tattoo::TattooFixedText(vm); } -const Common::String FixedText::getText(FixedTextId fixedTextId) { - return Common::String(_curLanguageEntry->fixedTextArray[fixedTextId]); -} - -const Common::String FixedText::getActionMessage(FixedTextActionId actionId, int messageIndex) { - assert(actionId >= 0); - assert(messageIndex >= 0); - const FixedTextActionEntry *curActionEntry = &_curLanguageEntry->actionArray[actionId]; - - assert(messageIndex < curActionEntry->fixedTextArrayCount); - return Common::String(curActionEntry->fixedTextArray[messageIndex]); -} } // End of namespace Sherlock diff --git a/engines/sherlock/fixed_text.h b/engines/sherlock/fixed_text.h index 50b0d5b96d..dcc1d69948 100644 --- a/engines/sherlock/fixed_text.h +++ b/engines/sherlock/fixed_text.h @@ -28,54 +28,6 @@ namespace Sherlock { -enum FixedTextId { - // Window buttons - kFixedText_Window_Exit = 0, - kFixedText_Window_Up, - kFixedText_Window_Down, - // Inventory buttons - kFixedText_Inventory_Exit, - kFixedText_Inventory_Look, - kFixedText_Inventory_Use, - kFixedText_Inventory_Give, - // Journal text - kFixedText_Journal_WatsonsJournal, - kFixedText_Journal_Page, - // Journal buttons - kFixedText_Journal_Exit, - kFixedText_Journal_Back10, - kFixedText_Journal_Up, - kFixedText_Journal_Down, - kFixedText_Journal_Ahead10, - kFixedText_Journal_Search, - kFixedText_Journal_FirstPage, - kFixedText_Journal_LastPage, - kFixedText_Journal_PrintText, - // Journal search - kFixedText_JournalSearch_Exit, - kFixedText_JournalSearch_Backward, - kFixedText_JournalSearch_Forward, - kFixedText_JournalSearch_NotFound, - // Initial inventory - kFixedText_InitInventory_Message, - kFixedText_InitInventory_HolmesCard, - kFixedText_InitInventory_Tickets, - kFixedText_InitInventory_CuffLink, - kFixedText_InitInventory_WireHook, - kFixedText_InitInventory_Note, - kFixedText_InitInventory_OpenWatch, - kFixedText_InitInventory_Paper, - kFixedText_InitInventory_Letter, - kFixedText_InitInventory_Tarot, - kFixedText_InitInventory_OrnateKey, - kFixedText_InitInventory_PawnTicket, - // Verbs - kFixedText_Verb_Open, - kFixedText_Verb_Look, - kFixedText_Verb_Talk, - kFixedText_Verb_Journal -}; - enum FixedTextActionId { kFixedTextAction_Invalid = -1, kFixedTextAction_Open = 0, @@ -85,33 +37,26 @@ enum FixedTextActionId { kFixedTextAction_Use }; -struct FixedTextActionEntry { - const char *const *fixedTextArray; - int fixedTextArrayCount; -}; - -struct FixedTextLanguageEntry { - Common::Language language; - const char *const *fixedTextArray; - const FixedTextActionEntry *actionArray; -}; +class SherlockEngine; class FixedText { -private: +protected: SherlockEngine *_vm; - const FixedTextLanguageEntry *_curLanguageEntry; - + FixedText(SherlockEngine *vm) : _vm(vm) {} public: - FixedText(SherlockEngine *vm); - ~FixedText() {} + static FixedText *init(SherlockEngine *vm); + virtual ~FixedText() {} /** - * Gets hardcoded text + * Gets text */ - const Common::String getText(FixedTextId fixedTextId); + virtual const Common::String getText(int fixedTextId) = 0; - const Common::String getActionMessage(FixedTextActionId actionId, int messageIndex); + /** + * Get action message + */ + virtual const Common::String getActionMessage(FixedTextActionId actionId, int messageIndex) = 0; }; } // End of namespace Sherlock diff --git a/engines/sherlock/journal.cpp b/engines/sherlock/journal.cpp index 77b63d1dfc..ec912af854 100644 --- a/engines/sherlock/journal.cpp +++ b/engines/sherlock/journal.cpp @@ -22,6 +22,7 @@ #include "sherlock/journal.h" #include "sherlock/scalpel/scalpel.h" +#include "sherlock/scalpel/scalpel_fixed_text.h" #include "sherlock/scalpel/scalpel_journal.h" #include "sherlock/tattoo/tattoo.h" #include "sherlock/tattoo/tattoo_journal.h" @@ -197,7 +198,7 @@ bool Journal::drawJournal(int direction, int howFar) { drawFrame(); } - Common::String fixedText_Page = fixedText.getText(kFixedText_Journal_Page); + Common::String fixedText_Page = IS_SERRATED_SCALPEL ? fixedText.getText(Scalpel::kFixedText_Journal_Page) : "TODO"; screen.gPrint(Common::Point(235, 21), COL_PEN_COLOR, fixedText_Page.c_str(), _page); diff --git a/engines/sherlock/module.mk b/engines/sherlock/module.mk index 6e573ab6fe..2a5cff640e 100644 --- a/engines/sherlock/module.mk +++ b/engines/sherlock/module.mk @@ -8,6 +8,7 @@ MODULE_OBJS = \ scalpel/drivers/mt32.o \ scalpel/tsage/logo.o \ scalpel/tsage/resources.o \ + scalpel/scalpel_fixed_text.o \ scalpel/scalpel_inventory.o \ scalpel/scalpel_journal.o \ scalpel/scalpel_map.o \ @@ -20,6 +21,7 @@ MODULE_OBJS = \ scalpel/settings.o \ tattoo/drivers/tattoo_adlib.o \ tattoo/tattoo.o \ + tattoo/tattoo_fixed_text.o \ tattoo/tattoo_journal.o \ tattoo/tattoo_map.o \ tattoo/tattoo_people.o \ diff --git a/engines/sherlock/scalpel/scalpel.cpp b/engines/sherlock/scalpel/scalpel.cpp index faead3be07..586978e1c5 100644 --- a/engines/sherlock/scalpel/scalpel.cpp +++ b/engines/sherlock/scalpel/scalpel.cpp @@ -22,6 +22,7 @@ #include "engines/util.h" #include "sherlock/scalpel/scalpel.h" +#include "sherlock/scalpel/scalpel_fixed_text.h" #include "sherlock/scalpel/scalpel_map.h" #include "sherlock/scalpel/scalpel_people.h" #include "sherlock/scalpel/scalpel_scene.h" @@ -868,7 +869,7 @@ bool ScalpelEngine::showOfficeCutscene3DO() { } void ScalpelEngine::loadInventory() { - FixedText &fixedText = *_fixedText; + ScalpelFixedText &fixedText = *(ScalpelFixedText *)_fixedText; Inventory &inv = *_inventory; Common::String fixedText_Message = fixedText.getText(kFixedText_InitInventory_Message); diff --git a/engines/sherlock/scalpel/scalpel_fixed_text.cpp b/engines/sherlock/scalpel/scalpel_fixed_text.cpp new file mode 100644 index 0000000000..dc15578b1d --- /dev/null +++ b/engines/sherlock/scalpel/scalpel_fixed_text.cpp @@ -0,0 +1,377 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "sherlock/scalpel/scalpel_fixed_text.h" +#include "sherlock/sherlock.h" + +namespace Sherlock { + +namespace Scalpel { + +static const char *const fixedTextEN[] = { + // SH1: Window buttons + "Exit", + "Up", + "Down", + // SH1: Inventory buttons + "Exit", + "Look", + "Use", + "Give", + // SH1: Journal text + "Watson's Journal", + "Page %d", + // SH1: Journal buttons + "Exit", + "Back 10", + "Up", + "Down", + "Ahead 10", + "Search", + "First Page", + "Last Page", + "Print Text", + // SH1: Journal search + "Exit", + "Backward", + "Forward", + "Text Not Found !", + // SH1: Initial Inventory + "A message requesting help", + "A number of business cards", + "Opera Tickets", + "Cuff Link", + "Wire Hook", + "Note", + "An open pocket watch", + "A piece of paper with numbers on it", + "A letter folded many times", + "Tarot Cards", + "An ornate key", + "A pawn ticket", + // SH2: Verbs + "Open", + "Look", + "Talk", + "Journal" +}; + +// sharp-s : 0xE1 / octal 341 +// small a-umlaut: 0x84 / octal 204 +// small o-umlaut: 0x94 / octal 224 +// small u-umlaut: 0x81 / octal 201 +static const char *const fixedTextDE[] = { + // SH1: Window buttons + "Zur\201ck", + "Hoch", + "Runter", + // SH1: Inventory buttons + "Zur\201ck", + "Schau", + "Benutze", + "Gib", + // SH1: Journal text + "Watsons Tagebuch", + "Seite %d", + // SH1: Journal buttons + "Zur\201ck", + "10 hoch", + "Hoch", + "Runter", + "10 runter", + "Suche", + "Erste Seite", + "Letzte Seite", + "Drucke Text", + // SH1: Journal search + "Zur\201ck", + "R\201ckw\204rts", // original: "Backward" + "Vorw\204rts", // original: "Forward" + "Text nicht gefunden!", + // SH1: Initial Inventory + "Ein Hilferuf von Lestrade", + "Holmes' Visitenkarten", + "Karten f\201rs Opernhaus", + "Manschettenkn\224pfe", + "Zum Haken verbogener Drahtkorb", + "Mitteilung am Epstein", + "Eine offene Taschenuhr", + "Ein Zettel mit Zahlen drauf", + "Ein mehrfach gefalteter Briefbogen", + "Ein Tarock-Kartenspiel", // [sic] + "Ein verzierter Schl\201ssel", + "Ein Pfandschein", + // SH2: Verbs + "\231ffne", + "Schau", + "Rede", + "Tagebuch" +}; + +// up-side down exclamation mark - 0xAD / octal 255 +// up-side down question mark - 0xA8 / octal 250 +// n with a wave on top - 0xA4 / octal 244 +static const char *const fixedTextES[] = { + // SH1: Window buttons + "Exit", + "Subir", + "Bajar", + // SH1: Inventory buttons + "Exit", + "Mirar", + "Usar", + "Dar", + // SH1: Journal text + "Diario de Watson", + "Pagina %d", + // SH1: Journal buttons + "Exit", + "Retroceder", + "Subir", + "baJar", + "Adelante", + "Buscar", + "1a pagina", + "Ult pagina", + "Imprimir", + // SH1: Journal search + "Exit", + "Retroceder", + "Avanzar", + "Texto no encontrado!", + // SH1: Initial Inventory + "Un mensaje solicitando ayuda", + "Unas cuantas tarjetas de visita", + "Entradas para la opera", + "Unos gemelos", + "Un gancho de alambre", + "Una nota", + "Un reloj de bolsillo abierto", + "Un trozo de papel con unos numeros", + "Un carta muy plegada", + "Unas cartas de Tarot", + "Una llave muy vistosa", + "Una papeleta de empe\244o", +}; + +// ========================================= + +// === Sherlock Holmes 1: Serrated Scalpel === +static const char *const fixedTextEN_ActionOpen[] = { + "This cannot be opened", + "It is already open", + "It is locked", + "Wait for Watson", + " ", + "." +}; + +static const char *const fixedTextDE_ActionOpen[] = { + "Das kann man nicht \224ffnen", + "Ist doch schon offen!", + "Leider verschlossen", + "Warte auf Watson", + " ", + "." +}; + +static const char *const fixedTextES_ActionOpen[] = { + "No puede ser abierto", + "Ya esta abierto", + "Esta cerrado", + "Espera a Watson", + " ", + "." +}; + +static const char *const fixedTextEN_ActionClose[] = { + "This cannot be closed", + "It is already closed", + "The safe door is in the way" +}; + +static const char *const fixedTextDE_ActionClose[] = { + "Das kann man nicht schlie\341en", + "Ist doch schon zu!", + "Die safet\201r ist Weg" +}; + +static const char *const fixedTextES_ActionClose[] = { + "No puede ser cerrado", + "Ya esta cerrado", + "La puerta de seguridad esta entre medias" +}; + +static const char *const fixedTextEN_ActionMove[] = { + "This cannot be moved", + "It is bolted to the floor", + "It is too heavy", + "The other crate is in the way" +}; + + +static const char *const fixedTextDE_ActionMove[] = { + "L\204\341t sich nicht bewegen", + "Festged\201belt in der Erde...", + "Oha, VIEL zu schwer", + "Der andere Kiste ist im Weg" // [sic] +}; + +static const char *const fixedTextES_ActionMove[] = { + "No puede moverse", + "Esta sujeto a la pared", + "Es demasiado pesado", + "El otro cajon esta en mitad" +}; + +static const char *const fixedTextEN_ActionPick[] = { + "Nothing of interest here", + "It is bolted down", + "It is too big to carry", + "It is too heavy", + "I think a girl would be more your type", + "Those flowers belong to Penny", + "She's far too young for you!", + "I think a girl would be more your type!", + "Government property for official use only" +}; + +static const char *const fixedTextDE_ActionPick[] = { + "Nichts Interessantes da", + "Zu gut befestigt", + "Ist ja wohl ein bi\341chen zu gro\341, oder ?", + "Oha, VIEL zu schwer", + "Ich denke, Du stehst mehr auf M\204dchen ?", + "Diese Blumen geh\224ren Penny", + "Sie ist doch viel zu jung f\201r Dich!", + "Ich denke, Du stehst mehr auf M\204dchen ?", + "Staatseigentum - Nur für den Dienstgebrauch !" +}; + +static const char *const fixedTextES_ActionPick[] = { + "No hay nada interesante", + "Esta anclado al suelo", + "Es muy grande para llevarlo", + "Pesa demasiado", + "Creo que una chica sera mas tu tipo", + "Esas flores pertenecen a Penny", + "\255Es demasiado joven para ti!" + "\255Creo que una chica sera mas tu tipo!", + "Propiedad del gobierno para uso oficial" +}; + +static const char *const fixedTextEN_ActionUse[] = { + "You can't do that", + "It had no effect", + "You can't reach it", + "OK, the door looks bigger! Happy?" + "Doors don't smoke" +}; + +static const char *const fixedTextDE_ActionUse[] = { + "Nein, das geht wirklich nicht", + "Tja keinerlei Wirkung", + "Da kommst du nicht dran", + "Na gut, die Tür sieht jetzt gr\224\341er aus. Zufrieden?" + "Türen sind Nichtraucher!" +}; + +static const char *const fixedTextES_ActionUse[] = { + "No puedes hacerlo", + "No tuvo ningun efecto", + "No puedes alcanzarlo", + "Bien, \255es enorme! \250Feliz?" + "Las puertas no fuman" +}; + +#define FIXEDTEXT_GETCOUNT(_name_) sizeof(_name_) / sizeof(byte *) +#define FIXEDTEXT_ENTRY(_name_) _name_, FIXEDTEXT_GETCOUNT(_name_) + +static const FixedTextActionEntry fixedTextEN_Actions[] = { + { FIXEDTEXT_ENTRY(fixedTextEN_ActionOpen) }, + { FIXEDTEXT_ENTRY(fixedTextEN_ActionClose) }, + { FIXEDTEXT_ENTRY(fixedTextEN_ActionMove) }, + { FIXEDTEXT_ENTRY(fixedTextEN_ActionPick) }, + { FIXEDTEXT_ENTRY(fixedTextEN_ActionUse) } +}; + +static const FixedTextActionEntry fixedTextDE_Actions[] = { + { FIXEDTEXT_ENTRY(fixedTextDE_ActionOpen) }, + { FIXEDTEXT_ENTRY(fixedTextDE_ActionClose) }, + { FIXEDTEXT_ENTRY(fixedTextDE_ActionMove) }, + { FIXEDTEXT_ENTRY(fixedTextDE_ActionPick) }, + { FIXEDTEXT_ENTRY(fixedTextDE_ActionUse) } +}; + +static const FixedTextActionEntry fixedTextES_Actions[] = { + { FIXEDTEXT_ENTRY(fixedTextES_ActionOpen) }, + { FIXEDTEXT_ENTRY(fixedTextES_ActionClose) }, + { FIXEDTEXT_ENTRY(fixedTextES_ActionMove) }, + { FIXEDTEXT_ENTRY(fixedTextES_ActionPick) }, + { FIXEDTEXT_ENTRY(fixedTextES_ActionUse) } +}; + +// ========================================= + +// TODO: +// It seems there was a French version of Sherlock Holmes 2 +static const FixedTextLanguageEntry fixedTextLanguages[] = { + { Common::DE_DEU, fixedTextDE, fixedTextDE_Actions }, + { Common::ES_ESP, fixedTextES, fixedTextES_Actions }, + { Common::EN_ANY, fixedTextEN, fixedTextEN_Actions }, + { Common::UNK_LANG, fixedTextEN, fixedTextEN_Actions } +}; + +// ========================================= + +// ========================================= + +ScalpelFixedText::ScalpelFixedText(SherlockEngine *vm) : FixedText(vm) { + // Figure out which fixed texts to use + Common::Language curLanguage = _vm->getLanguage(); + + const FixedTextLanguageEntry *curLanguageEntry = fixedTextLanguages; + + while (curLanguageEntry->language != Common::UNK_LANG) { + if (curLanguageEntry->language == curLanguage) + break; // found current language + curLanguageEntry++; + } + _curLanguageEntry = curLanguageEntry; +} + +const Common::String ScalpelFixedText::getText(int fixedTextId) { + return Common::String(_curLanguageEntry->fixedTextArray[fixedTextId]); +} + +const Common::String ScalpelFixedText::getActionMessage(FixedTextActionId actionId, int messageIndex) { + assert(actionId >= 0); + assert(messageIndex >= 0); + const FixedTextActionEntry *curActionEntry = &_curLanguageEntry->actionArray[actionId]; + + assert(messageIndex < curActionEntry->fixedTextArrayCount); + return Common::String(curActionEntry->fixedTextArray[messageIndex]); +} + +} // End of namespace Scalpel + +} // End of namespace Sherlock diff --git a/engines/sherlock/scalpel/scalpel_fixed_text.h b/engines/sherlock/scalpel/scalpel_fixed_text.h new file mode 100644 index 0000000000..de4c55d08e --- /dev/null +++ b/engines/sherlock/scalpel/scalpel_fixed_text.h @@ -0,0 +1,108 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef SHERLOCK_SCALPEL_FIXED_TEXT_H +#define SHERLOCK_SCALPEL_FIXED_TEXT_H + +#include "sherlock/fixed_text.h" + +namespace Sherlock { + +namespace Scalpel { + +enum FixedTextId { + // Window buttons + kFixedText_Window_Exit = 0, + kFixedText_Window_Up, + kFixedText_Window_Down, + // Inventory buttons + kFixedText_Inventory_Exit, + kFixedText_Inventory_Look, + kFixedText_Inventory_Use, + kFixedText_Inventory_Give, + // Journal text + kFixedText_Journal_WatsonsJournal, + kFixedText_Journal_Page, + // Journal buttons + kFixedText_Journal_Exit, + kFixedText_Journal_Back10, + kFixedText_Journal_Up, + kFixedText_Journal_Down, + kFixedText_Journal_Ahead10, + kFixedText_Journal_Search, + kFixedText_Journal_FirstPage, + kFixedText_Journal_LastPage, + kFixedText_Journal_PrintText, + // Journal search + kFixedText_JournalSearch_Exit, + kFixedText_JournalSearch_Backward, + kFixedText_JournalSearch_Forward, + kFixedText_JournalSearch_NotFound, + // Initial inventory + kFixedText_InitInventory_Message, + kFixedText_InitInventory_HolmesCard, + kFixedText_InitInventory_Tickets, + kFixedText_InitInventory_CuffLink, + kFixedText_InitInventory_WireHook, + kFixedText_InitInventory_Note, + kFixedText_InitInventory_OpenWatch, + kFixedText_InitInventory_Paper, + kFixedText_InitInventory_Letter, + kFixedText_InitInventory_Tarot, + kFixedText_InitInventory_OrnateKey, + kFixedText_InitInventory_PawnTicket, +}; + +struct FixedTextActionEntry { + const char *const *fixedTextArray; + int fixedTextArrayCount; +}; + +struct FixedTextLanguageEntry { + Common::Language language; + const char *const *fixedTextArray; + const FixedTextActionEntry *actionArray; +}; + +class ScalpelFixedText: public FixedText { +private: + const FixedTextLanguageEntry *_curLanguageEntry; +public: + ScalpelFixedText(SherlockEngine *vm); + virtual ~ScalpelFixedText() {} + + /** + * Gets text + */ + virtual const Common::String getText(int fixedTextId); + + /** + * Get action message + */ + virtual const Common::String getActionMessage(FixedTextActionId actionId, int messageIndex); +}; + +} // End of namespace Scalpel + +} // End of namespace Sherlock + +#endif diff --git a/engines/sherlock/scalpel/scalpel_inventory.cpp b/engines/sherlock/scalpel/scalpel_inventory.cpp index bf12a16025..5744ba9e90 100644 --- a/engines/sherlock/scalpel/scalpel_inventory.cpp +++ b/engines/sherlock/scalpel/scalpel_inventory.cpp @@ -21,6 +21,7 @@ */ #include "sherlock/scalpel/scalpel_inventory.h" +#include "sherlock/scalpel/scalpel_fixed_text.h" #include "sherlock/scalpel/scalpel_screen.h" #include "sherlock/scalpel/scalpel_user_interface.h" #include "sherlock/scalpel/scalpel.h" diff --git a/engines/sherlock/scalpel/scalpel_journal.cpp b/engines/sherlock/scalpel/scalpel_journal.cpp index 8bb74e977d..e3421cdf99 100644 --- a/engines/sherlock/scalpel/scalpel_journal.cpp +++ b/engines/sherlock/scalpel/scalpel_journal.cpp @@ -22,6 +22,7 @@ #include "sherlock/journal.h" #include "sherlock/sherlock.h" +#include "sherlock/scalpel/scalpel_fixed_text.h" #include "sherlock/scalpel/scalpel_journal.h" #include "sherlock/scalpel/scalpel_screen.h" #include "sherlock/scalpel/scalpel.h" diff --git a/engines/sherlock/scalpel/scalpel_talk.cpp b/engines/sherlock/scalpel/scalpel_talk.cpp index 33d0e4a3ad..2ea3172b49 100644 --- a/engines/sherlock/scalpel/scalpel_talk.cpp +++ b/engines/sherlock/scalpel/scalpel_talk.cpp @@ -21,6 +21,7 @@ */ #include "sherlock/scalpel/scalpel_talk.h" +#include "sherlock/scalpel/scalpel_fixed_text.h" #include "sherlock/scalpel/scalpel_map.h" #include "sherlock/scalpel/scalpel_people.h" #include "sherlock/scalpel/scalpel_scene.h" diff --git a/engines/sherlock/scalpel/scalpel_user_interface.cpp b/engines/sherlock/scalpel/scalpel_user_interface.cpp index 9a07a40ee5..684824c17d 100644 --- a/engines/sherlock/scalpel/scalpel_user_interface.cpp +++ b/engines/sherlock/scalpel/scalpel_user_interface.cpp @@ -21,6 +21,7 @@ */ #include "sherlock/scalpel/scalpel_user_interface.h" +#include "sherlock/scalpel/scalpel_fixed_text.h" #include "sherlock/scalpel/scalpel_inventory.h" #include "sherlock/scalpel/scalpel_journal.h" #include "sherlock/scalpel/scalpel_people.h" diff --git a/engines/sherlock/sherlock.cpp b/engines/sherlock/sherlock.cpp index f491023718..72101fd4ef 100644 --- a/engines/sherlock/sherlock.cpp +++ b/engines/sherlock/sherlock.cpp @@ -95,7 +95,7 @@ void SherlockEngine::initialize() { _animation = new Animation(this); _debugger = new Debugger(this); _events = new Events(this); - _fixedText = new FixedText(this); + _fixedText = FixedText::init(this); _inventory = Inventory::init(this); _map = Map::init(this); _music = new Music(this, _mixer); diff --git a/engines/sherlock/tattoo/tattoo_fixed_text.cpp b/engines/sherlock/tattoo/tattoo_fixed_text.cpp new file mode 100644 index 0000000000..ec0c8ca127 --- /dev/null +++ b/engines/sherlock/tattoo/tattoo_fixed_text.cpp @@ -0,0 +1,51 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "sherlock/tattoo/tattoo_fixed_text.h" +#include "sherlock/sherlock.h" + +namespace Sherlock { + +namespace Tattoo { + +static const char *const FIXED_TEXT_ENGLISH[] = { + "Open", + "Look", + "Talk", + "Journal" +}; + +TattooFixedText::TattooFixedText(SherlockEngine *vm) : FixedText(vm) { +} + +const Common::String TattooFixedText::getText(int fixedTextId) { + return Common::String(FIXED_TEXT_ENGLISH[fixedTextId]); +} + +const Common::String TattooFixedText::getActionMessage(FixedTextActionId actionId, int messageIndex) { + return Common::String(); +} + + +} // End of namespace Tattoo + +} // End of namespace Sherlock diff --git a/engines/sherlock/tattoo/tattoo_fixed_text.h b/engines/sherlock/tattoo/tattoo_fixed_text.h new file mode 100644 index 0000000000..1ac75aa56a --- /dev/null +++ b/engines/sherlock/tattoo/tattoo_fixed_text.h @@ -0,0 +1,60 @@ +/* ScummVM - Graphic Adventure Engine + * + * ScummVM is the legal property of its developers, whose names + * are too numerous to list here. Please refer to the COPYRIGHT + * file distributed with this source distribution. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#ifndef SHERLOCK_TATTOO_FIXED_TEXT_H +#define SHERLOCK_TATTOO_FIXED_TEXT_H + +#include "sherlock/fixed_text.h" + +namespace Sherlock { + +namespace Tattoo { + +enum FixedTextId { + kFixedText_Open, + kFixedText_Look, + kFixedText_Talk, + kFixedText_Journal +}; + +class TattooFixedText: public FixedText { +private: +public: + TattooFixedText(SherlockEngine *vm); + virtual ~TattooFixedText() {} + + /** + * Gets text + */ + virtual const Common::String getText(int fixedTextId); + + /** + * Get action message + */ + virtual const Common::String getActionMessage(FixedTextActionId actionId, int messageIndex); +}; + +} // End of namespace Scalpel + +} // End of namespace Sherlock + +#endif diff --git a/engines/sherlock/tattoo/widget_verbs.cpp b/engines/sherlock/tattoo/widget_verbs.cpp index 9cf4794fc0..a56b151e34 100644 --- a/engines/sherlock/tattoo/widget_verbs.cpp +++ b/engines/sherlock/tattoo/widget_verbs.cpp @@ -21,6 +21,7 @@ */ #include "sherlock/tattoo/widget_verbs.h" +#include "sherlock/tattoo/tattoo_fixed_text.h" #include "sherlock/tattoo/tattoo_scene.h" #include "sherlock/tattoo/tattoo_user_interface.h" #include "sherlock/tattoo/tattoo_people.h" @@ -41,9 +42,9 @@ void WidgetVerbs::activateVerbMenu(bool objectsOn) { TattooUserInterface &ui = *(TattooUserInterface *)_vm->_ui; TattooPeople &people = *(TattooPeople *)_vm->_people; bool isWatson = false; - Common::String strLook = fixedText.getText(kFixedText_Verb_Look); - Common::String strTalk = fixedText.getText(kFixedText_Verb_Talk); - Common::String strJournal = fixedText.getText(kFixedText_Verb_Journal); + Common::String strLook = fixedText.getText(kFixedText_Look); + Common::String strTalk = fixedText.getText(kFixedText_Talk); + Common::String strJournal = fixedText.getText(kFixedText_Journal); if (talk._talkToAbort) return; @@ -108,9 +109,9 @@ void WidgetVerbs::execute() { Common::Point scenePos = mousePos + ui._currentScroll; bool noDesc = false; - Common::String strLook = fixedText.getText(kFixedText_Verb_Look); - Common::String strTalk = fixedText.getText(kFixedText_Verb_Talk); - Common::String strJournal = fixedText.getText(kFixedText_Verb_Journal); + Common::String strLook = fixedText.getText(kFixedText_Look); + Common::String strTalk = fixedText.getText(kFixedText_Talk); + Common::String strJournal = fixedText.getText(kFixedText_Journal); checkTabbingKeys(_verbCommands.size()); |