[Scummvm-git-logs] scummvm master -> ebe7ad7d6620102b68d345d51c477bd032743e1b

yuv422 noreply at scummvm.org
Sat Feb 15 22:42:51 UTC 2025


This automated email contains information about 6 new commits which have been
pushed to the 'scummvm' repo located at https://github.com/scummvm/scummvm .

Summary:
42ec4849a2 DARKSEED: Add korean to I18nText struct
295703a8d2 DARKSEED: Refactoring console text handling to better support multi-byte languages.
be56262a53 DARKSEED: Getting ready to support multi-byte object names.
5433135288 DARKSEED: Korean object names
ad8a140af7 DARKSEED: Add Korean object names when picking up objects and putting under pillow.
ebe7ad7d66 DARKSEED: Add Korean generic response text


Commit: 42ec4849a237271afe5d604c92e5cbe9198943e1
    https://github.com/scummvm/scummvm/commit/42ec4849a237271afe5d604c92e5cbe9198943e1
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2025-02-16T09:39:18+11:00

Commit Message:
DARKSEED: Add korean to I18nText struct

Changed paths:
    engines/darkseed/langtext.h


diff --git a/engines/darkseed/langtext.h b/engines/darkseed/langtext.h
index c514d45c6a5..f278dffb83b 100644
--- a/engines/darkseed/langtext.h
+++ b/engines/darkseed/langtext.h
@@ -31,6 +31,7 @@ struct I18nText {
 	const char *es;
 	const char *fr;
 	const char *de;
+	const char *ko;
 };
 
 struct TextWithPosition {
@@ -57,294 +58,336 @@ constexpr I18nText kI18N_CarKeysIgnitionText = {
 	"You see the car keys in the ignition.",
 	"VES LAS LLAVES DEL COCHE EN EL CONTACTO.",
 	"VOUS VOYEZ LES CLEFS DE LA VOTTURE DAUS LE STARTER.",
-	"DU SIEHSTDIE AUTOSCHLUSSEL IM ANLASSER."
+	"DU SIEHSTDIE AUTOSCHLUSSEL IM ANLASSER.",
+	nullptr
 };
 
 constexpr I18nText kI18N_YouSeeIronBarsText = {
 	"You see the iron bars of your cell.",
 	"VES LAS BARRAS DE HIERRO DE TU CELDA.",
 	"VOUS VOYEZ LES BARREAUX DE FER DE VOTRE CELLULE.",
-	"DU SIEHST DIE EISENSTANGEN IN DER ZELLE."
+	"DU SIEHST DIE EISENSTANGEN IN DER ZELLE.",
+	nullptr
 };
 
 constexpr I18nText kI18N_YouSeeDelbertText = {
 	"You see Delbert, not much to look at.",
 	"VES A DELBERT, NO HAY MUCHO QUE VER.",
 	"VOUS VOYEZ DELBERT, PAS GRAND CHOSE A VOIR.",
-	"DU SIEHST DELBERT, NICHT VIEL ZU SEHEN"
+	"DU SIEHST DELBERT, NICHT VIEL ZU SEHEN",
+	nullptr
 };
 
 constexpr I18nText kI18N_YouSeeTheClerkText = {
 	"You see the clerk.",
 	"VES AL EMPLEADO.",
 	"VOUS VOYEZ L'HOMME.",
-	"DU SIEHST DEN MANN."
+	"DU SIEHST DEN MANN.",
+	nullptr
 };
 
 constexpr I18nText kI18N_YouSeeTheOpenGloveBoxText = {
 	"You see the open glove box.",
 	"VES LA CAJA DE LOS GUANTES ABIERTA.",
 	"VOUS VOYEZ LA BOITE DE GANT OUVERTE.",
-	"DU SIEHST DAS OFFENE HANDSCHUHFACH."
+	"DU SIEHST DAS OFFENE HANDSCHUHFACH.",
+	nullptr
 };
 
 constexpr I18nText kI18N_youSeeTheText = {
   "You see the",
   "VES",
   "VOUS VOYEZ",
-  "DU SIEHST"
+  "DU SIEHST",
+  nullptr
 };
 
 constexpr I18nText kI18N_TheCopsIgnoreYourDemandsText = {
   "The cops ignore your demands for attention.",
   "LOS POLICIAS IGNORAN TUS LLAMADAS DE ATENCION.",
   "LES FLICS IGNORENT VOTRE DEMANDE D'ATTENTION.",
-  "DIE POLIZISTEN BEACHTEN NICHT DEINE FORDERUNGEN."
+  "DIE POLIZISTEN BEACHTEN NICHT DEINE FORDERUNGEN.",
+  nullptr
 };
 
 constexpr I18nText kI18N_ThePhoneIsRingingText = {
   "The phone is ringing.",
   "EL TELEFONO ESTA SONANDO.",
   "LE TELEPHONE SONNE.",
-  "DAS TELEFON KLINGELT."
+  "DAS TELEFON KLINGELT.",
+  "\xb8\xe5\xd1\xc1\xa5\x49\xb7\xa1\x20\xb6\x89\x9f\xb3\x93\xa1\x94\x61\x2e"
 };
 
 constexpr I18nText kI18N_TheDoorbellIsRingingText = {
   "The doorbell is ringing.",
   "EL TIMBRE DE LA PUERTA ESTA SONANDO.",
   "LA SONETTE DE LA PORTE SONNE.",
-  "DIE TUERKLINGEL LAEUTET."
+  "DIE TUERKLINGEL LAEUTET.",
+  nullptr
 };
 
 constexpr I18nText kI18N_ChooseAnItemBeforeText = {
   "Choose an item before giving clerk more money.",
   "ELIGE UN OBJETO ANTES DE DARLE AL EMPLEADO MAS DINERO.",
   "CHOISISSEZ QUELQUE CHOSE AVANT DE REMETTRE L'ARGENT A VENDEUR.",
-  "SUCHE ETWAS AUS BEVOR DU DEN MANN BEZAHLST."
+  "SUCHE ETWAS AUS BEVOR DU DEN MANN BEZAHLST.",
+  nullptr
 };
 
 constexpr I18nText kI18N_YouTouchDelbertText = {
   "You touch Delbert...",
   "TOCAS A DELBERT...",
   "VOUS TOUCHEZ DELBERT.",
-  "GREIFE DELBERT AN..."
+  "GREIFE DELBERT AN...",
+  nullptr
 };
 
 constexpr I18nText kI18N_YouTouchTheColdIronBarsText = {
   "You touch the cold iron bars.",
   "TOCAS LAS FRIAS BARRAS DE HIERRO.",
   "VOUS TOUCHEZ LES BARREAUX DE FER.",
-  "GREIFE DIE KALTEN EISEN STANGEN AN."
+  "GREIFE DIE KALTEN EISEN STANGEN AN.",
+  nullptr
 };
 
 constexpr I18nText kI18N_TheSergeantSaysNiceGunText = {
   "The sergeant says 'Nice gun eh? It's a Browning'",
   "EL SARGENTO DICE: 'BUENA PISTOLA, EH? ES UNA BROWNING.'",
   "LE SERGENT DIT: BEAU REVOLVER HEIN, C'EST UN BROWNING.",
-  "DER SEARGENT SAGT 'SCHOENE PISTOLE, EH? ES IST EIN BROWNING.'"
+  "DER SEARGENT SAGT 'SCHOENE PISTOLE, EH? ES IST EIN BROWNING.'",
+  nullptr
 };
 
 constexpr I18nText kI18N_YouTurnOnTheMusicText = {
   "You turn on the music.",
   "PONES MUSICA.",
   "VOUS METTEZ LA MUSIQUE.",
-  "SCHALTE DIE MUSIK AN."
+  "SCHALTE DIE MUSIK AN.",
+  nullptr
 };
 
 constexpr I18nText kI18N_YouTurnOffTheMusicText = {
   "You turn off the music.",
   "QUITAS LA MUSICA.",
   "VOUS ARRETEZ LA MUSIQUE.",
-  "SCHALTE DIE MUSIK AB."
+  "SCHALTE DIE MUSIK AB.",
+  nullptr
 };
 
 constexpr I18nText kI18N_YouTouchTheOrnateSignalText = {
   "You touch the surface of the ornate sigil.",
   "TOCAS LA SUPERFICIE DE LA FIGURA ADORNADA.",
   "VOUS TOUCHEZ LA SURFACE DE LA PIERRE MAGIQUE.",
-  "GREIFE DIE VERZAUBERTEN STEINE AN."
+  "GREIFE DIE VERZAUBERTEN STEINE AN.",
+  nullptr
 };
 
 constexpr I18nText kI18N_ThisSentryCannotBeStoppedWithText = {
 	"This sentry cannot be stopped with a",
 	"NO PUEDES PARAR A ESTE CENTINELA CON",
 	"VOUS N'ARRETEREZ PAS LA SENTINELLE AVEC",
-	"DIESE WACHE KANN NICHT AUFGEHALTEN WERDEN MIT"
+	"DIESE WACHE KANN NICHT AUFGEHALTEN WERDEN MIT",
+	nullptr
 };
 
 constexpr I18nText kI18N_HasNoEffectOnTheAlienTubesText = {
 	"The %s has no effect on the alien tubes.",
 	"%s NO TIENE EFECTO SOBRE LOS TUBOS ALIENIGENAS.",
 	"%s RESTE SANS EFFET SUR LES TUBES EXTRA-TERRESTRES.",
-	"%s BEWIRKT NICHTS AN AUSSERIRDISCHEN TUNNELS."
+	"%s BEWIRKT NICHTS AN AUSSERIRDISCHEN TUNNELS.",
+	nullptr
 };
 
 constexpr I18nText kI18N_YouIncinerateTheText = {
 	"You incinerate the %s inside the power nexus!.",
 	"INCINERAS %s DENTRO DE LA FUENTA DE ENERGIA.",
 	"VOUS INCINEREZ %s A L'INTERIEUR DU LIEN DE PUISSANCE.",
-	"DU VERNICHTEST %s MIT DER STROMVERSORGUNG!"
+	"DU VERNICHTEST %s MIT DER STROMVERSORGUNG!",
+	nullptr
 };
 
 constexpr I18nText kI18N_HasNoEffectOnTheAlienMonstrosityText = {
 	"The %s has no effect on this alien monstrosity.",
 	"%s NO TIENE EFECTO SOBRE ESTA MONSTRUOSIDAD ALIENIGENA.",
 	"%s RESTE SANS EFFET SUR CETTE MONSTRUOSITE EXTRA-TERRESTRE.",
-	"%s BEWIRKT NICHTS AM AUSSERIRDISCHEN MONSTRUM."
+	"%s BEWIRKT NICHTS AM AUSSERIRDISCHEN MONSTRUM.",
+	nullptr
 };
 
 constexpr I18nText kI18N_cutTheWiresText = {
 	"The %s is not strong enough to cut the cables.\nPerhaps if you had some wire cutters?",
 	"%s NO ES LO BASTANTE RESISTENTE COMO PARA CORTAR LOS CABLES.\nY SI TUVIERAS UN CORTACABLES?",
 	"%s NE POURRA PAS COUPER LES CABLES.\nET SI VOUS AVIEZ DES PINCES COUPANTES?",
-	"%s IST NICHT STARK GENUG, UM DIE KABEL ABZUSCHNEIDEN.\nHAST DU VIELLEICHT EINEN KABELSCHNEIDER?"
+	"%s IST NICHT STARK GENUG, UM DIE KABEL ABZUSCHNEIDEN.\nHAST DU VIELLEICHT EINEN KABELSCHNEIDER?",
+	nullptr
 };
 
 constexpr I18nText kI18N_NoEffectOnTheProtectedAncientText = {
 	"The %s has no effect on the protected ancient.",
 	"%s NO TIENE EFECTO SOBRE EL ANTEPASADO PROTEGIDO.",
 	"%s N'A AUCUN EFFET SUR L'ANCIEN PROTEGE.",
-	"%s BEWIRKT NICHTS BEI DEM GESCHUETZTEN ALTEN."
+	"%s BEWIRKT NICHTS BEI DEM GESCHUETZTEN ALTEN.",
+	nullptr
 };
 
 constexpr I18nText kI18N_YouHideTheObjectUnderThePillowText = {
 	"You hide the %s under the pillow.",
 	"OCULTAS %s BAJO LA ALMOHADA.",
 	"VOUS CACHEZ %s SOUS L'OREILLER.",
-	"DU VERSTECKST %s UNTER DEM KISSEN."
+	"DU VERSTECKST %s UNTER DEM KISSEN.",
+	nullptr
 };
 
 constexpr I18nText kI18N_DontPutTheObjectInTheTrunkText = {
 	"Don't put the %s in the trunk, you'll forget it.",
 	"NO PONGAS %s EN EL BAUL, TE OLVIDARAS.",
 	"NE METTEZ PAS %s DANS LE COFFRE, VOUS L'OUBLIEREZ.",
-	"WENN DU %s IN DEN TRUHE LEGST, VERGISST DU ES." // TODO check this is correct.
+	"WENN DU %s IN DEN TRUHE LEGST, VERGISST DU ES.", // TODO check this is correct.
+	nullptr
 };
 
 constexpr I18nText kI18N_TheCarWontStartWithTheText = {
 	"The car won't start with the %s.",
 	"EL COCHE NO SE PONDRA EN MARCHA CON %s.",
 	"LA VOITURE NE DEMARRERA PAS AVEC %s.",
-	"DAS AUTO SPRINGT NICHT AN MIT %s."
+	"DAS AUTO SPRINGT NICHT AN MIT %s.",
+	nullptr
 };
 
 constexpr I18nText kI18N_IfYouPutTheObjectInTheTrunkText = {
 	"If you put the %s in the trunk, you'll forget it.",
 	"SI PONES %s EN EL BAUL, TE OLVIDARAS.",
 	"SI VOUS METTEZ %s DANS LE COFFRE, VOUS L'OUBLIEREZ.",
-	"WENN DU %s IN DEN TRUHE LEGST, VERGISST DU ES."
+	"WENN DU %s IN DEN TRUHE LEGST, VERGISST DU ES.",
+	nullptr
 };
 
 constexpr I18nText kI18N_TheObjectIsYoursYouHaventLostItText = {
 	"The %s is yours, you haven't lost it.",
 	"%s ES TUYA, NO LA HASA PERDIDO.",
 	"%s EST A VOUS, VOUS NE L'AVEZ PAS PERDUE.",
-	"%s GEHOERT DIR, DU HAST ES NICHT VERLOREN."
+	"%s GEHOERT DIR, DU HAST ES NICHT VERLOREN.",
+	nullptr
 };
 
 constexpr I18nText kI18N_notAGoodPlaceToHideTheText = {
 	"Not a good place to hide the %s.",
 	"NO ES UN BUEN SITIO PARA OCULTAR %S.",
 	"VOUS NE POURREZ PAS CACHER %S.",
-	"KEIN GUTES VERSTECK FUER %S."
+	"KEIN GUTES VERSTECK FUER %S.",
+	nullptr
 };
 
 constexpr I18nText kI18N_youTryToPutTheObjectInsideButTheDoorWontOpenText = {
 	"You try to put the %s inside, but the door won't open",
 	"INTENTAS PONER %s DENTRO, PERO LA PUERTA NO SE ABRIRA.",
 	"VOUS ESSAYEZ DE METTRE %s A L'INTERIEUR, MAIS LA PORTE NE S'OUVRIRA PAS.",
-	"DU VERSUCHST, %s HINEINZUSTELLEN, ABER DIE TUER OEFFNET SICH NICHT."
+	"DU VERSUCHST, %s HINEINZUSTELLEN, ABER DIE TUER OEFFNET SICH NICHT.",
+	nullptr
 };
 
 constexpr I18nText kI18N_theKitchenIsNoPlaceToKeepTheText = {
 	"The kitchen is no place to keep the %s.",
 	"LA COCINA NO ES LUGAR PARA GUARDAR %s.",
 	"LA CUISINE NE CONVIENT PAS A %s.",
-	"DIE KUECHE IST KEIN PLATZ FUER %s."
+	"DIE KUECHE IST KEIN PLATZ FUER %s.",
+	nullptr
 };
 
 constexpr I18nText kI18N_youllForgetTheObjectHereText = {
 	"You'll forget the %s here.",
 	"OLIVIDARAS %s AQUI.",
 	"VOUS OUBLIEREZ %s ICI.",
-	"DU WIRST NOCH %s HIER VERGESSEN."
+	"DU WIRST NOCH %s HIER VERGESSEN.",
+	nullptr
 };
 
 constexpr I18nText kI18N_youdRatherHaveTheObjectWithYouText = {
 	"You'd rather have the %s with you.",
 	"SERIA MEJOR TENER %s CONTIGO.",
 	"IL VAUDRAIT MIEUX AVOIR %s SUR VOUS.",
-	"DU HAETTEST LIEBER %s BEI DIR."
+	"DU HAETTEST LIEBER %s BEI DIR.",
+	nullptr
 };
 
 constexpr I18nText kI18N_theObjectHasNoEffectText = {
 	"The %s has no effect.",
 	"%s NO TIENE EFECTO.",
 	"%s N'A AUCUN EFFET.",
-	"%s BEWIRKT NICHTS."
+	"%s BEWIRKT NICHTS.",
+	nullptr
 };
 
 constexpr I18nText kI18N_thisIsNotAGoodPlaceForTheText = {
 	"This is not a good place for the %s.",
 	"NO ES UN BUEN SITIO PARA %s.",
 	"CE N'EST PAS UN BON ENDROIT POUR %s.",
-	"DAS IST KEIN GUTER PLATZ FUER %s."
+	"DAS IST KEIN GUTER PLATZ FUER %s.",
+	nullptr
 };
 
 constexpr I18nText kI18N_youSeeAReflectionOfTheText = {
 	"You see a reflection of the %s.",
 	"VES UN REFLEJO DE %s.",
 	"VOUS VOYEZ UN REFLET REPRESENTANT %s.",
-	"DU SIEHST EIN SPIEGELBILD VON %s."
+	"DU SIEHST EIN SPIEGELBILD VON %s.",
+	nullptr
 };
 
 constexpr I18nText kI18N_youDontWantToLeaveTheObjectUnderTheBedText = {
 	"You don't want to leave the %s under the bed.",
 	"NO QUIERES DEJAR %s DEBAJO DE LA CAMA.",
 	"POURQUOI LAISSERIEZ-VOUS %s SOUS LE LIT?",
-	"DU WILLST %s NICHT UNTER DEM BETT LASSEN."
+	"DU WILLST %s NICHT UNTER DEM BETT LASSEN.",
+	nullptr
 };
 
 constexpr I18nText kI18N_genResponse0_usingTheObjectOnTheObjectItMustBeYourHeadachesText = {
 	"Using the %s on the %s doesn't make any sense, it must be your headaches!",
 	"UTILIZAR %s EN %s NO TIENE SENTIDO, TE PRODUCIRA DOLOR DE CABEZA",
 	"POURQUOI UTILISER %s SUR %s PRENEZ DONC DE L'ASPIRINE!",
-	"GEBRAUCHEN VON %s AUF %s MACHT KEINEN SINN, DAS MUSS AN DEINEN KOPFSCHMERZEN LIEGEN!"
+	"GEBRAUCHEN VON %s AUF %s MACHT KEINEN SINN, DAS MUSS AN DEINEN KOPFSCHMERZEN LIEGEN!",
+	nullptr
 };
 
 constexpr I18nText kI18N_genResponse1_theObjectWillDoNothingToTheText = {
 	"The %s will do nothing to the %s.",
 	"%s NO TIENE NADA QUE VER CON %s.",
 	"%s NE FERONT RIEN A %s.",
-	"%s HAT NICHTS ZU TUN MIT %s"
+	"%s HAT NICHTS ZU TUN MIT %s",
+	nullptr
 };
 
 constexpr I18nText kI18N_genResponse2_theObjectDoesntHaveAnyEffectOnTheText = {
 	"The %s doesn't have any effect on the %s.",
 	"%s NO LE CAUSARA EFECTO A %s.",
 	"%s N'AURA AUCUN EFFET SUR %s.",
-	"%s BEWIRKT NICHTS MIT %s."
+	"%s BEWIRKT NICHTS MIT %s.",
+	nullptr
 };
 
 constexpr I18nText kI18N_genResponse3_theObjectHasNothingToDoWithTheText = {
 	"The %s has nothing to do with %s.",
 	"%s NO TIENE NADA QUE VER CON %s.",
 	"%s N'A AUCUN RAPPORT AVEC %s.",
-	"%s HAT NICHTS ZU TUN MIT %s."
+	"%s HAT NICHTS ZU TUN MIT %s.",
+	nullptr
 };
 
 constexpr I18nText kI18N_genResponse4_areYouFeelingAlrightText = {
 	"Are you feeling alright?",
 	"TE ENCUENTRAS BIEN?",
 	"VOUS ETES SUR QUE CA VA BIEN?",
-	"FUEHLST DU DICH GUT?"
+	"FUEHLST DU DICH GUT?",
+	nullptr
 };
 
 constexpr I18nText kI18N_blankText = {
 	"",
 	"",
 	"",
-	""
+	"",
+	nullptr
 };
 } // namespace Darkseed
 


Commit: 295703a8d2887a405ba07c9a0971ac7f8c6ae830
    https://github.com/scummvm/scummvm/commit/295703a8d2887a405ba07c9a0971ac7f8c6ae830
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2025-02-16T09:39:18+11:00

Commit Message:
DARKSEED: Refactoring console text handling to better support multi-byte languages.

Changed paths:
    engines/darkseed/console.cpp
    engines/darkseed/console.h
    engines/darkseed/darkseed.cpp
    engines/darkseed/inventory.cpp
    engines/darkseed/langtext.cpp
    engines/darkseed/langtext.h
    engines/darkseed/objects.cpp
    engines/darkseed/objects.h
    engines/darkseed/usecode.cpp
    engines/darkseed/usecode.h


diff --git a/engines/darkseed/console.cpp b/engines/darkseed/console.cpp
index 33798fc866c..2f6a2510b71 100644
--- a/engines/darkseed/console.cpp
+++ b/engines/darkseed/console.cpp
@@ -69,19 +69,15 @@ void Console::printTosText(int tosIndex) {
 		}
 		debug("%s", "");
 	}
-	addTextLineU32(text);
+	addTextLine(text);
 	_sound->playTosSpeech(tosIndex);
 }
 
-void Console::addTextLine(const Common::String &text) {
-	addTextLineU32(Common::U32String(text));
-}
-
 void Console::addToCurrentLine(const Common::String &text) {
 	addToCurrentLineU32(Common::U32String(text));
 }
 
-void Console::addTextLineU32(const Common::U32String &text) {
+void Console::addTextLine(const Common::U32String &text) {
 	Common::U32StringArray lines;
 	_font->wordWrapText(text, consoleArea.width(), lines);
 	for (auto &line : lines) {
@@ -92,7 +88,7 @@ void Console::addTextLineU32(const Common::U32String &text) {
 void Console::addToCurrentLineU32(const Common::U32String &text) {
 	int curIdx = _startIdx == 0 ? _text.size() - 1 : _startIdx - 1;
 	_startIdx = curIdx;
-	addTextLineU32(_text[_startIdx] + text);
+	addTextLine(_text[_startIdx] + text);
 }
 
 void Console::addI18NText(const I18nText &text) {
diff --git a/engines/darkseed/console.h b/engines/darkseed/console.h
index 61fdc44948c..78b5c56f76f 100644
--- a/engines/darkseed/console.h
+++ b/engines/darkseed/console.h
@@ -47,8 +47,9 @@ public:
 	~Console();
 
 	void printTosText(int tosIndex);
-	void addTextLine(const Common::String &text);
+	void addTextLine(const Common::U32String &text);
 	void addToCurrentLine(const Common::String &text);
+	void addToCurrentLineU32(const Common::U32String &text);
 
 	void addI18NText(const I18nText &text);
 
@@ -56,8 +57,6 @@ public:
 	void drawStringAt(int x, int y, const Common::U32String &text) const;
 
 private:
-	void addTextLineU32(const Common::U32String &text);
-	void addToCurrentLineU32(const Common::U32String &text);
 	void addLine(const Common::U32String &line);
 };
 
diff --git a/engines/darkseed/darkseed.cpp b/engines/darkseed/darkseed.cpp
index 4c90290dde7..88c91689f27 100644
--- a/engines/darkseed/darkseed.cpp
+++ b/engines/darkseed/darkseed.cpp
@@ -1902,7 +1902,7 @@ void DarkseedEngine::lookCode(int objNum) {
 		}
 		return;
 	}
-	_console->addTextLine(Common::String::format("%s %s.", getI18NText(kI18N_youSeeTheText), _objectVar.getObjectName(objNum)));
+	_console->addTextLine(formatInjectStrings(getI18NText(kI18N_youSeeTheText), _objectVar.getObjectName(objNum).c_str()));
 }
 
 void DarkseedEngine::printTime() {
diff --git a/engines/darkseed/inventory.cpp b/engines/darkseed/inventory.cpp
index 331bf15ea99..c81f42bb4f5 100644
--- a/engines/darkseed/inventory.cpp
+++ b/engines/darkseed/inventory.cpp
@@ -160,7 +160,7 @@ void Inventory::handleClick() {
 	} else {
 		g_engine->_actionMode = icon;
 		g_engine->_console->printTosText(972);
-		g_engine->_console->addToCurrentLine(Common::String::format("%s.", g_engine->_objectVar.getObjectName(icon)));
+		g_engine->_console->addToCurrentLine(formatInjectStrings(Common::U32String("%s."), g_engine->_objectVar.getObjectName(icon).c_str()));
 	}
 }
 
diff --git a/engines/darkseed/langtext.cpp b/engines/darkseed/langtext.cpp
index 93db6813f4f..dc6417ca500 100644
--- a/engines/darkseed/langtext.cpp
+++ b/engines/darkseed/langtext.cpp
@@ -24,12 +24,13 @@
 
 namespace Darkseed {
 
-const char *getI18NText(const I18nText &text) {
+Common::U32String getI18NText(const I18nText &text) {
 	switch (g_engine->getLanguage()) {
-	case Common::ES_ESP : return text.es;
-	case Common::FR_FRA : return text.fr;
-	case Common::DE_DEU : return text.de;
-	default : return text.en;
+	case Common::ES_ESP : return Common::U32String(text.es);
+	case Common::FR_FRA : return Common::U32String(text.fr);
+	case Common::DE_DEU : return Common::U32String(text.de);
+	case Common::KO_KOR : return text.ko ? convertToU32String(text.ko, Common::KO_KOR) : Common::U32String(text.en);
+	default : return Common::U32String(text.en);
 	}
 }
 
@@ -68,4 +69,30 @@ Common::U32String convertToU32String(const char *text, Common::Language language
 	return Common::U32String(text);
 }
 
+Common::U32String formatInjectStrings(Common::U32String format, ...) {
+	Common::U32String outString;
+	va_list args;
+	va_start(args, format);
+
+	for (Common::U32String::const_iterator itr = format.begin(); itr != format.end(); itr++) {
+		if (*itr == '%') {
+			itr++;
+			if (itr == format.end()) {
+				outString += '%';
+				break;
+			}
+			if (*itr == 's') {
+				auto text = va_arg(args, char32_t *);
+				outString += text;
+			} else {
+				outString += *itr;
+			}
+		} else {
+			outString += *itr;
+		}
+	}
+	va_end(args);
+	return outString;
+}
+
 } // End of namespace Darkseed
diff --git a/engines/darkseed/langtext.h b/engines/darkseed/langtext.h
index f278dffb83b..5234024b433 100644
--- a/engines/darkseed/langtext.h
+++ b/engines/darkseed/langtext.h
@@ -49,11 +49,13 @@ struct I18NTextWithPosition {
 
 };
 
-const char *getI18NText(const I18nText &text);
+Common::U32String getI18NText(const I18nText &text);
 const TextWithPosition &getI18NTextWithPosition(const I18NTextWithPosition &i18nTextWithPosition);
 
 Common::U32String convertToU32String(const char *text, Common::Language language);
 
+Common::U32String formatInjectStrings(Common::U32String format, ...);
+
 constexpr I18nText kI18N_CarKeysIgnitionText = {
 	"You see the car keys in the ignition.",
 	"VES LAS LLAVES DEL COCHE EN EL CONTACTO.",
@@ -95,10 +97,10 @@ constexpr I18nText kI18N_YouSeeTheOpenGloveBoxText = {
 };
 
 constexpr I18nText kI18N_youSeeTheText = {
-  "You see the",
-  "VES",
-  "VOUS VOYEZ",
-  "DU SIEHST",
+  "You see the %s.",
+  "VES %s.",
+  "VOUS VOYEZ %s.",
+  "DU SIEHST %s.",
   nullptr
 };
 
@@ -183,10 +185,10 @@ constexpr I18nText kI18N_YouTouchTheOrnateSignalText = {
 };
 
 constexpr I18nText kI18N_ThisSentryCannotBeStoppedWithText = {
-	"This sentry cannot be stopped with a",
-	"NO PUEDES PARAR A ESTE CENTINELA CON",
-	"VOUS N'ARRETEREZ PAS LA SENTINELLE AVEC",
-	"DIESE WACHE KANN NICHT AUFGEHALTEN WERDEN MIT",
+	"This sentry cannot be stopped with a %s.",
+	"NO PUEDES PARAR A ESTE CENTINELA CON %s.",
+	"VOUS N'ARRETEREZ PAS LA SENTINELLE AVEC %s.",
+	"DIESE WACHE KANN NICHT AUFGEHALTEN WERDEN MIT %s.",
 	nullptr
 };
 
diff --git a/engines/darkseed/objects.cpp b/engines/darkseed/objects.cpp
index 8dfe06a0498..9cc48ce03c0 100644
--- a/engines/darkseed/objects.cpp
+++ b/engines/darkseed/objects.cpp
@@ -184,19 +184,19 @@ void Objects::setObjectRunningCode(int idx, int16 value) {
 	_objectRunningCode[idx] = value;
 }
 
-const char *Objects::getObjectName(int idx) {
+Common::U32String Objects::getObjectName(int idx) {
 	if (idx < 0 || idx >= MAX_OBJECTS) {
 		error("getObjectName: index out of range.");
 	}
 
 	switch (g_engine->getLanguage()) {
-	case Common::FR_FRA: return objectNameTbl_fr[idx];
-	case Common::DE_DEU: return objectNameTbl_de[idx];
-	case Common::ES_ESP: return objectNameTbl_es[idx];
+	case Common::FR_FRA: return Common::U32String(objectNameTbl_fr[idx]);
+	case Common::DE_DEU: return Common::U32String(objectNameTbl_de[idx]);
+	case Common::ES_ESP: return Common::U32String(objectNameTbl_es[idx]);
 	default: break;
 	}
 
-	return objectNameTbl_en[idx];
+	return Common::U32String(objectNameTbl_en[idx]);
 }
 
 static inline void syncPoint(Common::Serializer &s, Common::Point &value) {
diff --git a/engines/darkseed/objects.h b/engines/darkseed/objects.h
index cc5345e5294..1e690ac1df7 100644
--- a/engines/darkseed/objects.h
+++ b/engines/darkseed/objects.h
@@ -62,7 +62,7 @@ public:
 	int getMoveObjectRoom(uint16 idx);
 	void setMoveObjectRoom(uint16 idx, uint8 value);
 
-	const char *getObjectName(int idx);
+	Common::U32String getObjectName(int idx);
 
 	int16 &operator[](uint16 varIdx);
 	const int16 &operator[](uint16 varIdx) const;
diff --git a/engines/darkseed/usecode.cpp b/engines/darkseed/usecode.cpp
index b44edc73ef7..363e4513d42 100644
--- a/engines/darkseed/usecode.cpp
+++ b/engines/darkseed/usecode.cpp
@@ -464,7 +464,7 @@ void Darkseed::UseCode::useCode(int objNum) {
 		}
 		if (objNum < 42 && objNum != 22 && (objNum != 7 || _objectVar[7] == 1)) {
 			_console->printTosText(955); // "You pick up the "
-			_console->addToCurrentLine(Common::String::format("%s.", _objectVar.getObjectName(objNum)));
+			_console->addToCurrentLineU32(formatInjectStrings(Common::U32String("%s."), _objectVar.getObjectName(objNum).c_str()));
 			_inventory.addItem(objNum);
 			g_engine->_room->_collisionType = 0;
 			g_engine->_room->removeObjectFromRoom(objNum);
@@ -1549,161 +1549,100 @@ void UseCode::genericResponse(int16 useObjNum, int16 targetObjNum, int16 tosIdx)
 	}
 	switch (tosIdx) {
 	case 979:
-		_console->addTextLine(
-			Common::String::format(
-				"%s %s.",
-				getI18NText(kI18N_ThisSentryCannotBeStoppedWithText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_ThisSentryCannotBeStoppedWithText, useObjNum);
 		break;
 	case 980:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_HasNoEffectOnTheAlienTubesText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_HasNoEffectOnTheAlienTubesText, useObjNum);
 		break;
 	case 981:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_YouIncinerateTheText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_YouIncinerateTheText, useObjNum);
 		break;
 	case 982:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_HasNoEffectOnTheAlienMonstrosityText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_HasNoEffectOnTheAlienMonstrosityText, useObjNum);
 		break;
 	case 983:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_cutTheWiresText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_cutTheWiresText, useObjNum);
 		break;
 	case 984:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_NoEffectOnTheProtectedAncientText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_NoEffectOnTheProtectedAncientText, useObjNum);
 		break;
 	case 985:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_YouHideTheObjectUnderThePillowText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_YouHideTheObjectUnderThePillowText, useObjNum);
 		break;
 	case 986:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_DontPutTheObjectInTheTrunkText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_DontPutTheObjectInTheTrunkText, useObjNum);
 		break;
 	case 987:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_TheCarWontStartWithTheText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_TheCarWontStartWithTheText, useObjNum);
 		break;
 	case 988:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_IfYouPutTheObjectInTheTrunkText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_IfYouPutTheObjectInTheTrunkText, useObjNum);
 		break;
 	case 989:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_TheObjectIsYoursYouHaventLostItText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_TheObjectIsYoursYouHaventLostItText, useObjNum);
 		break;
 	case 990:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_notAGoodPlaceToHideTheText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_notAGoodPlaceToHideTheText, useObjNum);
 		break;
 	case 991:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_youTryToPutTheObjectInsideButTheDoorWontOpenText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_youTryToPutTheObjectInsideButTheDoorWontOpenText, useObjNum);
 		break;
 	case 992:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_theKitchenIsNoPlaceToKeepTheText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_theKitchenIsNoPlaceToKeepTheText, useObjNum);
 		break;
 	case 993:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_youllForgetTheObjectHereText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_youllForgetTheObjectHereText, useObjNum);
 		break;
 	case 994:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_youdRatherHaveTheObjectWithYouText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_youdRatherHaveTheObjectWithYouText, useObjNum);
 		break;
 	case 995:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_theObjectHasNoEffectText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_theObjectHasNoEffectText, useObjNum);
 		break;
 	case 996:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_thisIsNotAGoodPlaceForTheText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_thisIsNotAGoodPlaceForTheText, useObjNum);
 		break;
 	case 997:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_youSeeAReflectionOfTheText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_youSeeAReflectionOfTheText, useObjNum);
 		break;
 	case 998:
-		_console->addTextLine(
-			Common::String::format(
-				getI18NText(kI18N_youDontWantToLeaveTheObjectUnderTheBedText),
-				_objectVar.getObjectName(useObjNum)));
+		genericSingleObjectResponse(kI18N_youDontWantToLeaveTheObjectUnderTheBedText, useObjNum);
 		break;
 	case 999:
 		switch (_genericResponseCounter) {
 		case 0:
 			_console->addTextLine(
-				Common::String::format(
+				formatInjectStrings(
 					getI18NText(kI18N_genResponse0_usingTheObjectOnTheObjectItMustBeYourHeadachesText),
-					_objectVar.getObjectName(useObjNum),
-					_objectVar.getObjectName(targetObjNum)
+					_objectVar.getObjectName(useObjNum).c_str(),
+					_objectVar.getObjectName(targetObjNum).c_str()
 				)
 			);
 			break;
 		case 1:
 			_console->addTextLine(
-				Common::String::format(
+				formatInjectStrings(
 					getI18NText(kI18N_genResponse1_theObjectWillDoNothingToTheText),
-					_objectVar.getObjectName(useObjNum),
-					_objectVar.getObjectName(targetObjNum)
+					_objectVar.getObjectName(useObjNum).c_str(),
+					_objectVar.getObjectName(targetObjNum).c_str()
 				)
 			);
 			break;
 		case 2:
 			_console->addTextLine(
-				Common::String::format(
+				formatInjectStrings(
 					getI18NText(kI18N_genResponse2_theObjectDoesntHaveAnyEffectOnTheText),
-					_objectVar.getObjectName(useObjNum),
-					_objectVar.getObjectName(targetObjNum)
+					_objectVar.getObjectName(useObjNum).c_str(),
+					_objectVar.getObjectName(targetObjNum).c_str()
 				)
 			);
 			break;
 		case 3:
 			_console->addTextLine(
-				Common::String::format(
+				formatInjectStrings(
 					getI18NText(kI18N_genResponse3_theObjectHasNothingToDoWithTheText),
-					_objectVar.getObjectName(useObjNum),
-					_objectVar.getObjectName(targetObjNum)
+					_objectVar.getObjectName(useObjNum).c_str(),
+					_objectVar.getObjectName(targetObjNum).c_str()
 				)
 			);
 			break;
@@ -1725,7 +1664,7 @@ void UseCode::putObjUnderPillow(int objNum) {
 	_objectVar.setMoveObjectRoom(objNum, 250);
 	g_engine->_cursor.setCursorType(Pointer);
 	_console->printTosText(946);
-	_console->addToCurrentLine(Common::String::format("%s", g_engine->_objectVar.getObjectName(objNum)));
+	_console->addToCurrentLineU32(g_engine->_objectVar.getObjectName(objNum));
 	_console->printTosText(947);
 }
 
@@ -1749,4 +1688,11 @@ void UseCode::startDigging(int16 targetObjNum) {
 	g_engine->playSound(14, 5, -1);
 }
 
+void UseCode::genericSingleObjectResponse(const I18nText &text, int16 useObjNum) {
+	_console->addTextLine(
+		formatInjectStrings(
+			getI18NText(text),
+			_objectVar.getObjectName(useObjNum).c_str()));
+}
+
 } // End of namespace Darkseed
diff --git a/engines/darkseed/usecode.h b/engines/darkseed/usecode.h
index 9bab1b4c18f..a5edd9ff827 100644
--- a/engines/darkseed/usecode.h
+++ b/engines/darkseed/usecode.h
@@ -90,7 +90,9 @@ private:
 	void putObjUnderPillow(int objNum);
 
 	void startDigging(int16 targetObjNum);
+	void genericSingleObjectResponse(const I18nText &text, int16 useObjNum);
 };
+
 } // namespace Darkseed
 
 #endif // DARKSEED_USECODE_H


Commit: be56262a5372eceafd24e5fbbb5cd7a147102ca4
    https://github.com/scummvm/scummvm/commit/be56262a5372eceafd24e5fbbb5cd7a147102ca4
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2025-02-16T09:39:18+11:00

Commit Message:
DARKSEED: Getting ready to support multi-byte object names.

Changed paths:
    engines/darkseed/darkseed.cpp
    engines/darkseed/langtext.cpp
    engines/darkseed/objects.cpp
    engines/darkseed/objects.h


diff --git a/engines/darkseed/darkseed.cpp b/engines/darkseed/darkseed.cpp
index 88c91689f27..dc4aecf5d30 100644
--- a/engines/darkseed/darkseed.cpp
+++ b/engines/darkseed/darkseed.cpp
@@ -77,6 +77,7 @@ Common::Error DarkseedEngine::run() {
 	_screen = new Graphics::Screen();
 	_tosText = new TosText();
 	_tosText->load();
+	_objectVar.loadObjectNames();
 	_console = new Console(_tosText, _sound);
 	_player = new Player();
 	_useCode = new UseCode(_console, _player, _objectVar, _inventory);
diff --git a/engines/darkseed/langtext.cpp b/engines/darkseed/langtext.cpp
index dc6417ca500..8fdcef23c5b 100644
--- a/engines/darkseed/langtext.cpp
+++ b/engines/darkseed/langtext.cpp
@@ -45,7 +45,7 @@ const TextWithPosition &getI18NTextWithPosition(const I18NTextWithPosition &i18n
 }
 
 Common::U32String convertToU32String(const char *text, Common::Language language) {
-	uint len = strlen(text);
+	size_t len = strlen(text);
 	switch (language) {
 	case Common::ZH_ANY:
 	case Common::KO_KOR: {
diff --git a/engines/darkseed/objects.cpp b/engines/darkseed/objects.cpp
index 9cc48ce03c0..d42dc1f5753 100644
--- a/engines/darkseed/objects.cpp
+++ b/engines/darkseed/objects.cpp
@@ -31,6 +31,7 @@ Objects::Objects() {
 	_objectRunningCode.resize(MAX_OBJECTS);
 	_moveObjectXY.resize(MAX_OBJECTS);
 	_moveObjectRoom.resize(MAX_OBJECTS); // The original only allocates 42 entries here but writes 199 in the save file!
+	_objectNames.resize(MAX_OBJECTS);
 	reset();
 }
 
@@ -184,19 +185,12 @@ void Objects::setObjectRunningCode(int idx, int16 value) {
 	_objectRunningCode[idx] = value;
 }
 
-Common::U32String Objects::getObjectName(int idx) {
+const Common::U32String &Objects::getObjectName(int idx) {
 	if (idx < 0 || idx >= MAX_OBJECTS) {
 		error("getObjectName: index out of range.");
 	}
 
-	switch (g_engine->getLanguage()) {
-	case Common::FR_FRA: return Common::U32String(objectNameTbl_fr[idx]);
-	case Common::DE_DEU: return Common::U32String(objectNameTbl_de[idx]);
-	case Common::ES_ESP: return Common::U32String(objectNameTbl_es[idx]);
-	default: break;
-	}
-
-	return Common::U32String(objectNameTbl_en[idx]);
+	return _objectNames[idx];
 }
 
 static inline void syncPoint(Common::Serializer &s, Common::Point &value) {
@@ -213,4 +207,15 @@ Common::Error Objects::sync(Common::Serializer &s) {
 	return Common::kNoError;
 }
 
+void Objects::loadObjectNames() {
+	for (int i = 0; i < MAX_OBJECTS; i++) {
+		switch (g_engine->getLanguage()) {
+		case Common::FR_FRA: _objectNames[i] = Common::U32String(objectNameTbl_fr[i]); break;
+		case Common::DE_DEU: _objectNames[i] = Common::U32String(objectNameTbl_de[i]); break;
+		case Common::ES_ESP: _objectNames[i] = Common::U32String(objectNameTbl_es[i]); break;
+		default: _objectNames[i] = Common::U32String(objectNameTbl_en[i]); break;
+		}
+	}
+}
+
 } // End of namespace Darkseed
diff --git a/engines/darkseed/objects.h b/engines/darkseed/objects.h
index 1e690ac1df7..ae7cd1e28f5 100644
--- a/engines/darkseed/objects.h
+++ b/engines/darkseed/objects.h
@@ -37,6 +37,7 @@ class Objects {
 	Common::Array<int16> _objectVar;
 	Common::Array<Common::Point> _moveObjectXY;
 	Common::Array<uint8> _moveObjectRoom;
+	Common::U32StringArray _objectNames;
 
 public:
 	Common::Array<int16> _objectRunningCode;
@@ -45,6 +46,7 @@ public:
 	static constexpr int MAX_OBJECTS = 199;
 	Objects();
 	void reset();
+	void loadObjectNames();
 
 	Common::Error sync(Common::Serializer &s);
 
@@ -62,7 +64,7 @@ public:
 	int getMoveObjectRoom(uint16 idx);
 	void setMoveObjectRoom(uint16 idx, uint8 value);
 
-	Common::U32String getObjectName(int idx);
+	const Common::U32String &getObjectName(int idx);
 
 	int16 &operator[](uint16 varIdx);
 	const int16 &operator[](uint16 varIdx) const;


Commit: 5433135288833d904d895882ed018ecc3b792f99
    https://github.com/scummvm/scummvm/commit/5433135288833d904d895882ed018ecc3b792f99
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2025-02-16T09:39:18+11:00

Commit Message:
DARKSEED: Korean object names

Changed paths:
    engines/darkseed/console.cpp
    engines/darkseed/console.h
    engines/darkseed/darkseed.cpp
    engines/darkseed/debugconsole.cpp
    engines/darkseed/inventory.cpp
    engines/darkseed/kofont.cpp
    engines/darkseed/kofont.h
    engines/darkseed/langtext.h
    engines/darkseed/objects.cpp
    engines/darkseed/objects.h


diff --git a/engines/darkseed/console.cpp b/engines/darkseed/console.cpp
index 2f6a2510b71..da2f76decfd 100644
--- a/engines/darkseed/console.cpp
+++ b/engines/darkseed/console.cpp
@@ -57,7 +57,7 @@ Console::~Console() {
 	delete _font;
 }
 
-void Console::printTosText(int tosIndex) {
+void Console::printTosText(int tosIndex, bool shouldAddToCurrentLine) {
 	const Common::U32String &text = _tosText->getText(tosIndex);
 
 	if (!_isCJKLanguage) {
@@ -69,7 +69,11 @@ void Console::printTosText(int tosIndex) {
 		}
 		debug("%s", "");
 	}
-	addTextLine(text);
+	if (shouldAddToCurrentLine) {
+		addToCurrentLine(text);
+	} else {
+		addTextLine(text);
+	}
 	_sound->playTosSpeech(tosIndex);
 }
 
diff --git a/engines/darkseed/console.h b/engines/darkseed/console.h
index 78b5c56f76f..b614456c44f 100644
--- a/engines/darkseed/console.h
+++ b/engines/darkseed/console.h
@@ -46,7 +46,7 @@ public:
 	Console(TosText *tostext, Sound *sound);
 	~Console();
 
-	void printTosText(int tosIndex);
+	void printTosText(int tosIndex, bool shouldAddToCurrentLine = false);
 	void addTextLine(const Common::U32String &text);
 	void addToCurrentLine(const Common::String &text);
 	void addToCurrentLineU32(const Common::U32String &text);
diff --git a/engines/darkseed/darkseed.cpp b/engines/darkseed/darkseed.cpp
index dc4aecf5d30..5ce9e9dd30e 100644
--- a/engines/darkseed/darkseed.cpp
+++ b/engines/darkseed/darkseed.cpp
@@ -35,6 +35,7 @@
 #include "darkseed/pal.h"
 #include "darkseed/pic.h"
 #include "darkseed/room.h"
+#include "darkseed/kofont.h"
 
 namespace Darkseed {
 
@@ -1658,9 +1659,13 @@ void DarkseedEngine::handleObjCollision(int targetObjNum) {
 		} else if (_actionMode == 27) {
 			_console->printTosText(929);
 		} else {
-			_console->printTosText(967);
-			_console->addToCurrentLine(_objectVar.getObjectName(_actionMode)); // TODO remove newline after object name
-			_console->printTosText(968);
+			_console->printTosText(967); // The
+			if (g_engine->getLanguage() == Common::KO_KOR) {
+				_console->addToCurrentLine(KoFont::getObjectString(_objectVar.getObjectName(_actionMode)));
+			} else {
+				_console->addToCurrentLine(_objectVar.getObjectName(_actionMode));
+			}
+			_console->printTosText(968, true); // was disintegrated.
 			_inventory.removeItem(_actionMode);
 		}
 		if (_actionMode > 4) {
@@ -1903,7 +1908,11 @@ void DarkseedEngine::lookCode(int objNum) {
 		}
 		return;
 	}
-	_console->addTextLine(formatInjectStrings(getI18NText(kI18N_youSeeTheText), _objectVar.getObjectName(objNum).c_str()));
+	if (g_engine->getLanguage() == Common::KO_KOR) {
+		_console->addTextLine(formatInjectStrings(getI18NText(kI18N_youSeeTheText), KoFont::getObjectString(_objectVar.getObjectName(objNum)).c_str()));
+	} else {
+		_console->addTextLine(formatInjectStrings(getI18NText(kI18N_youSeeTheText), _objectVar.getObjectName(objNum).c_str()));
+	}
 }
 
 void DarkseedEngine::printTime() {
diff --git a/engines/darkseed/debugconsole.cpp b/engines/darkseed/debugconsole.cpp
index 701944ceca1..b46612a2438 100644
--- a/engines/darkseed/debugconsole.cpp
+++ b/engines/darkseed/debugconsole.cpp
@@ -49,7 +49,7 @@ bool DebugConsole::Cmd_tostext(int argc, const char **argv) {
 
 	uint16 textIdx = atoi(argv[1]);
 	if (textIdx < _tosText->getNumEntries()) {
-		debugPrintf("%s\n", _tosText->getText(textIdx).c_str());
+		debugPrintf("%s\n", _tosText->getText(textIdx).encode().c_str());
 	} else {
 		debugPrintf("index too large!\n");
 	}
diff --git a/engines/darkseed/inventory.cpp b/engines/darkseed/inventory.cpp
index c81f42bb4f5..054e2000df8 100644
--- a/engines/darkseed/inventory.cpp
+++ b/engines/darkseed/inventory.cpp
@@ -22,6 +22,7 @@
 #include "darkseed/darkseed.h"
 #include "darkseed/inventory.h"
 #include "darkseed/menu.h"
+#include "darkseed/kofont.h"
 
 namespace Darkseed {
 
@@ -159,8 +160,13 @@ void Inventory::handleClick() {
 		g_engine->lookCode(icon);
 	} else {
 		g_engine->_actionMode = icon;
-		g_engine->_console->printTosText(972);
-		g_engine->_console->addToCurrentLine(formatInjectStrings(Common::U32String("%s."), g_engine->_objectVar.getObjectName(icon).c_str()));
+		if (g_engine->getLanguage() == Common::KO_KOR) {
+			g_engine->_console->addTextLine(KoFont::getObjectString(g_engine->_objectVar.getObjectName(icon)));
+			g_engine->_console->printTosText(972, true);
+		} else {
+			g_engine->_console->printTosText(972);
+			g_engine->_console->addToCurrentLine(formatInjectStrings(Common::U32String("%s."), g_engine->_objectVar.getObjectName(icon).c_str()));
+		}
 	}
 }
 
diff --git a/engines/darkseed/kofont.cpp b/engines/darkseed/kofont.cpp
index 629fd3c62a6..3bd9d9209aa 100644
--- a/engines/darkseed/kofont.cpp
+++ b/engines/darkseed/kofont.cpp
@@ -193,7 +193,7 @@ int16 SHORT_ARRAY_1000_034a[32] = {
 	32, 32, 32, 32,
 	32, 32, -1, -1};
 
-void KoFont::extractKoIndexComponents(uint32 charIdx, uint16 *param_2, uint16 *param_3, uint16 *param_4) const {
+void KoFont::extractKoIndexComponents(uint32 charIdx, uint16 *param_2, uint16 *param_3, uint16 *param_4) {
 	int uVar1;
 	int iVar2;
 	int uVar3;
@@ -220,6 +220,22 @@ void KoFont::extractKoIndexComponents(uint32 charIdx, uint16 *param_2, uint16 *p
 	*param_4 = (uVar3 >> 5) - 2;
 }
 
+bool KoFont::isConsonant(uint32 charIdx) {
+	uint16 param1, param2, param3;
+	extractKoIndexComponents(charIdx, &param1, &param2, &param3);
+	return param3 < 109;
+}
+
+Common::U32String KoFont::getObjectString(const Common::U32String &object) {
+	if (object.size() == 0) {
+		return Common::U32String("");
+	}
+	if (isConsonant(object[object.size() - 1])) {
+		return object + convertToU32String("\xb7\x69", Common::KO_KOR); // -eul
+	}
+	return object + convertToU32String("\x9f\x69", Common::KO_KOR); // -reul
+}
+
 int KoFont::getOtherCharIdx(uint32 chr) const {
 	switch (chr) {
 	case '!':
diff --git a/engines/darkseed/kofont.h b/engines/darkseed/kofont.h
index f7b12cb0c94..59cd2b96942 100644
--- a/engines/darkseed/kofont.h
+++ b/engines/darkseed/kofont.h
@@ -46,6 +46,9 @@ public:
 	int getCharWidth(uint32 chr) const override;
 	void drawChar(Graphics::Surface *dst, uint32 chr, int x, int y, uint32 color) const override;
 
+	static void extractKoIndexComponents(uint32 charIdx, uint16 *param_2, uint16 *param_3, uint16 *param_4);
+	static bool isConsonant(uint32 charIdx);
+	static Common::U32String getObjectString(const Common::U32String &object);
 private:
 	void loadFontDataSet(Common::Array<Common::Array<uint8>> &dataSet, int size, int packedGlyphSize, Common::File &file);
 	void loadFontGlyph(Common::Array<uint8> &pixels, int packedGlyphSize, Common::File &file);
@@ -53,7 +56,6 @@ private:
 	void createGlyph(uint8 *pixels, uint32 chr) const;
 	void addToGlyph(uint8 *destPixels, int16 index) const;
 	void addPixels(uint8 *destPixels, const Common::Array<uint8> &pixels) const;
-	void extractKoIndexComponents(uint32 charIdx, uint16 *param_2, uint16 *param_3, uint16 *param_4) const;
 	int getOtherCharIdx(uint32 chr) const;
 	void drawOtherGlyph(Graphics::Surface *dst, uint8 chr, int x, int y) const;
 };
diff --git a/engines/darkseed/langtext.h b/engines/darkseed/langtext.h
index 5234024b433..80d258b20aa 100644
--- a/engines/darkseed/langtext.h
+++ b/engines/darkseed/langtext.h
@@ -101,7 +101,7 @@ constexpr I18nText kI18N_youSeeTheText = {
   "VES %s.",
   "VOUS VOYEZ %s.",
   "DU SIEHST %s.",
-  nullptr
+  "%s \xac\x69\xcd\x61\xa5\xb3\x93\xa1\x94\x61"
 };
 
 constexpr I18nText kI18N_TheCopsIgnoreYourDemandsText = {
diff --git a/engines/darkseed/objects.cpp b/engines/darkseed/objects.cpp
index d42dc1f5753..12393d913e2 100644
--- a/engines/darkseed/objects.cpp
+++ b/engines/darkseed/objects.cpp
@@ -97,6 +97,56 @@ const int16 &Objects::operator[](uint16 varIdx) const {
 	return _objectVar[varIdx];
 }
 
+void Objects::loadObjectNames() {
+	auto lang = g_engine->getLanguage();
+	if (lang == Common::KO_KOR) {
+		loadKoreanObjectNames();
+	} else {
+		for (int i = 0; i < MAX_OBJECTS; i++) {
+			switch (lang) {
+			case Common::FR_FRA: _objectNames[i] = Common::U32String(objectNameTbl_fr[i]); break;
+			case Common::DE_DEU: _objectNames[i] = Common::U32String(objectNameTbl_de[i]); break;
+			case Common::ES_ESP: _objectNames[i] = Common::U32String(objectNameTbl_es[i]); break;
+			default: _objectNames[i] = Common::U32String(objectNameTbl_en[i]); break;
+			}
+		}
+	}
+}
+
+void Objects::loadKoreanObjectNames() {
+	Common::File file;
+	if (!file.open("tos.exe")) {
+		error("Failed to open TOS.EXE");
+	}
+
+	for (int i = 0; i < MAX_OBJECTS; i++) {
+		file.seek(0x22f62 + i * 4);
+		uint16 offset = file.readUint16LE();
+		file.seek(0x20990 + offset);
+		_objectNames[i] = readU32String(file);
+	}
+
+	file.close();
+}
+
+Common::U32String Objects::readU32String(Common::SeekableReadStream &readStream) {
+	Common::U32String str;
+	uint8 byte = readStream.readByte();
+	while (byte != 0) {
+		if (byte & 0x80) {
+			uint8 byte2 = readStream.readByte();
+			if (readStream.err()) {
+				error("Failed to read byte from stream!");
+			}
+			str += (int)byte << 8 | byte2;
+		} else {
+			str += byte;
+		}
+		byte = readStream.readByte();
+	}
+	return str;
+}
+
 static constexpr uint16 eyeDescriptionsTbl[] = {
 	0, 0, 0, 0,
 	0, 0, 0, 513,
@@ -207,15 +257,4 @@ Common::Error Objects::sync(Common::Serializer &s) {
 	return Common::kNoError;
 }
 
-void Objects::loadObjectNames() {
-	for (int i = 0; i < MAX_OBJECTS; i++) {
-		switch (g_engine->getLanguage()) {
-		case Common::FR_FRA: _objectNames[i] = Common::U32String(objectNameTbl_fr[i]); break;
-		case Common::DE_DEU: _objectNames[i] = Common::U32String(objectNameTbl_de[i]); break;
-		case Common::ES_ESP: _objectNames[i] = Common::U32String(objectNameTbl_es[i]); break;
-		default: _objectNames[i] = Common::U32String(objectNameTbl_en[i]); break;
-		}
-	}
-}
-
 } // End of namespace Darkseed
diff --git a/engines/darkseed/objects.h b/engines/darkseed/objects.h
index ae7cd1e28f5..7f96e9b33bf 100644
--- a/engines/darkseed/objects.h
+++ b/engines/darkseed/objects.h
@@ -68,6 +68,11 @@ public:
 
 	int16 &operator[](uint16 varIdx);
 	const int16 &operator[](uint16 varIdx) const;
+
+private:
+	void loadKoreanObjectNames();
+
+	Common::U32String readU32String(Common::SeekableReadStream &readStream);
 };
 
 } // namespace Darkseed


Commit: ad8a140af778bfc9e2fbd9bd3a8b92ad48fb81db
    https://github.com/scummvm/scummvm/commit/ad8a140af778bfc9e2fbd9bd3a8b92ad48fb81db
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2025-02-16T09:39:18+11:00

Commit Message:
DARKSEED: Add Korean object names when picking up objects and putting under pillow.

Changed paths:
    engines/darkseed/usecode.cpp


diff --git a/engines/darkseed/usecode.cpp b/engines/darkseed/usecode.cpp
index 363e4513d42..147f5d14d53 100644
--- a/engines/darkseed/usecode.cpp
+++ b/engines/darkseed/usecode.cpp
@@ -23,6 +23,7 @@
 #include "darkseed/darkseed.h"
 #include "darkseed/usecode.h"
 #include "darkseed/usecode_tos_tables.h"
+#include "darkseed/kofont.h"
 
 namespace Darkseed {
 
@@ -463,8 +464,13 @@ void Darkseed::UseCode::useCode(int objNum) {
 			return;
 		}
 		if (objNum < 42 && objNum != 22 && (objNum != 7 || _objectVar[7] == 1)) {
-			_console->printTosText(955); // "You pick up the "
-			_console->addToCurrentLineU32(formatInjectStrings(Common::U32String("%s."), _objectVar.getObjectName(objNum).c_str()));
+			if (g_engine->getLanguage() == Common::KO_KOR) {
+				_console->addTextLine(KoFont::getObjectString(_objectVar.getObjectName(objNum)));
+				_console->printTosText(955, true); // "You pick up the "
+			} else {
+				_console->printTosText(955); // "You pick up the "
+				_console->addToCurrentLineU32(formatInjectStrings(Common::U32String("%s."), _objectVar.getObjectName(objNum).c_str()));
+			}
 			_inventory.addItem(objNum);
 			g_engine->_room->_collisionType = 0;
 			g_engine->_room->removeObjectFromRoom(objNum);
@@ -1664,8 +1670,12 @@ void UseCode::putObjUnderPillow(int objNum) {
 	_objectVar.setMoveObjectRoom(objNum, 250);
 	g_engine->_cursor.setCursorType(Pointer);
 	_console->printTosText(946);
-	_console->addToCurrentLineU32(g_engine->_objectVar.getObjectName(objNum));
-	_console->printTosText(947);
+	if (g_engine->getLanguage() == Common::KO_KOR) {
+		_console->addToCurrentLineU32(KoFont::getObjectString(g_engine->_objectVar.getObjectName(objNum)));
+	} else {
+		_console->addToCurrentLineU32(g_engine->_objectVar.getObjectName(objNum));
+	}
+	_console->printTosText(947, true);
 }
 
 static constexpr bool diggingxflipTbl[12] = {


Commit: ebe7ad7d6620102b68d345d51c477bd032743e1b
    https://github.com/scummvm/scummvm/commit/ebe7ad7d6620102b68d345d51c477bd032743e1b
Author: Eric Fry (yuv422 at reversedgames.com)
Date: 2025-02-16T09:39:18+11:00

Commit Message:
DARKSEED: Add Korean generic response text

Changed paths:
    engines/darkseed/kofont.cpp
    engines/darkseed/kofont.h
    engines/darkseed/langtext.h
    engines/darkseed/usecode.cpp


diff --git a/engines/darkseed/kofont.cpp b/engines/darkseed/kofont.cpp
index 3bd9d9209aa..2f198600378 100644
--- a/engines/darkseed/kofont.cpp
+++ b/engines/darkseed/kofont.cpp
@@ -236,6 +236,26 @@ Common::U32String KoFont::getObjectString(const Common::U32String &object) {
 	return object + convertToU32String("\x9f\x69", Common::KO_KOR); // -reul
 }
 
+Common::U32String KoFont::getTopicString(const Common::U32String &object) {
+	if (object.size() == 0) {
+		return Common::U32String("");
+	}
+	if (isConsonant(object[object.size() - 1])) {
+		return object + convertToU32String("\xb7\x65", Common::KO_KOR); // -eun
+	}
+	return object + convertToU32String("\x93\x65", Common::KO_KOR); // -neun
+}
+
+Common::U32String KoFont::getLinkingString(const Common::U32String &object) {
+	if (object.size() == 0) {
+		return Common::U32String("");
+	}
+	if (isConsonant(object[object.size() - 1])) {
+		return object + convertToU32String("\x89\xc1", Common::KO_KOR); // -gwa
+	}
+	return object + convertToU32String("\xb5\xc1", Common::KO_KOR); // -wa
+}
+
 int KoFont::getOtherCharIdx(uint32 chr) const {
 	switch (chr) {
 	case '!':
diff --git a/engines/darkseed/kofont.h b/engines/darkseed/kofont.h
index 59cd2b96942..2a74fb2132c 100644
--- a/engines/darkseed/kofont.h
+++ b/engines/darkseed/kofont.h
@@ -49,6 +49,8 @@ public:
 	static void extractKoIndexComponents(uint32 charIdx, uint16 *param_2, uint16 *param_3, uint16 *param_4);
 	static bool isConsonant(uint32 charIdx);
 	static Common::U32String getObjectString(const Common::U32String &object);
+	static Common::U32String getTopicString(const Common::U32String &object);
+	static Common::U32String getLinkingString(const Common::U32String &object);
 private:
 	void loadFontDataSet(Common::Array<Common::Array<uint8>> &dataSet, int size, int packedGlyphSize, Common::File &file);
 	void loadFontGlyph(Common::Array<uint8> &pixels, int packedGlyphSize, Common::File &file);
diff --git a/engines/darkseed/langtext.h b/engines/darkseed/langtext.h
index 80d258b20aa..04c66510a5a 100644
--- a/engines/darkseed/langtext.h
+++ b/engines/darkseed/langtext.h
@@ -349,7 +349,7 @@ constexpr I18nText kI18N_genResponse0_usingTheObjectOnTheObjectItMustBeYourHeada
 	"UTILIZAR %s EN %s NO TIENE SENTIDO, TE PRODUCIRA DOLOR DE CABEZA",
 	"POURQUOI UTILISER %s SUR %s PRENEZ DONC DE L'ASPIRINE!",
 	"GEBRAUCHEN VON %s AUF %s MACHT KEINEN SINN, DAS MUSS AN DEINEN KOPFSCHMERZEN LIEGEN!",
-	nullptr
+	"%s %s\xb5\x41\x20\xac\x61\xb6\x77\xd0\x61\x93\x65\x88\xf5\xb7\x65\x20\xa0\x69\x95\xa1\x96\x41\xbb\xa1\x20\xb4\x67\xaf\x73\x93\xa1\x94\x61\x2e\x20\x8b\x61\x20\xaf\xb1\xd0\x65\x20\x96\x81\xc9\xb7\x98\x81\xa2\x85\xb5\x41\x20\x8b\x61\x9c\xe1\x93\x65\x88\xf5\xb7\xa1\x20\xb4\x61\x93\xa9\x8c\x61\xb6\x61\x3f"
 };
 
 constexpr I18nText kI18N_genResponse1_theObjectWillDoNothingToTheText = {
@@ -357,7 +357,7 @@ constexpr I18nText kI18N_genResponse1_theObjectWillDoNothingToTheText = {
 	"%s NO TIENE NADA QUE VER CON %s.",
 	"%s NE FERONT RIEN A %s.",
 	"%s HAT NICHTS ZU TUN MIT %s",
-	nullptr
+	"%s %s\xb5\x41\x20\xac\x61\xb6\x77\xd0\x61\x93\x65\x88\xf5\xb7\x65\x20\xb4\x61\xa2\x81\x9c\xe5\x20\xad\xa1\xb6\x77\xb7\xa1\x20\xb4\xf4\xaf\x73\x93\xa1\x94\x61\x2e"
 };
 
 constexpr I18nText kI18N_genResponse2_theObjectDoesntHaveAnyEffectOnTheText = {
@@ -365,7 +365,7 @@ constexpr I18nText kI18N_genResponse2_theObjectDoesntHaveAnyEffectOnTheText = {
 	"%s NO LE CAUSARA EFECTO A %s.",
 	"%s N'AURA AUCUN EFFET SUR %s.",
 	"%s BEWIRKT NICHTS MIT %s.",
-	nullptr
+	"%s %s\xb5\x41\x20\xb4\x61\xa2\x81\xb5\x77\xd0\xb7\x95\xa1\x20\xa3\xa1\xc3\xa1\xbb\xa1\xa1\xb5\xd0\x73\x93\xa1\x94\x61\x2e"
 };
 
 constexpr I18nText kI18N_genResponse3_theObjectHasNothingToDoWithTheText = {
@@ -373,7 +373,7 @@ constexpr I18nText kI18N_genResponse3_theObjectHasNothingToDoWithTheText = {
 	"%s NO TIENE NADA QUE VER CON %s.",
 	"%s N'A AUCUN RAPPORT AVEC %s.",
 	"%s HAT NICHTS ZU TUN MIT %s.",
-	nullptr
+	"%s %s \xb8\xe5\xd1\x61\x20\x89\xc5\x89\x81\x88\x61\x20\xb4\xf4\xaf\x73\x93\xa1\x94\x61\x2e"
 };
 
 constexpr I18nText kI18N_genResponse4_areYouFeelingAlrightText = {
@@ -381,7 +381,7 @@ constexpr I18nText kI18N_genResponse4_areYouFeelingAlrightText = {
 	"TE ENCUENTRAS BIEN?",
 	"VOUS ETES SUR QUE CA VA BIEN?",
 	"FUEHLST DU DICH GUT?",
-	nullptr
+	"\xbb\xa1\x8b\x71\x20\xb8\xf7\xaf\xa5\xb7\xa1\x20\xb5\xa5\xb8\xe5\xd0\x73\x93\xa1\x8c\x61\x3f\x0a"
 };
 
 constexpr I18nText kI18N_blankText = {
diff --git a/engines/darkseed/usecode.cpp b/engines/darkseed/usecode.cpp
index 147f5d14d53..4ac86df545a 100644
--- a/engines/darkseed/usecode.cpp
+++ b/engines/darkseed/usecode.cpp
@@ -1549,6 +1549,7 @@ void UseCode::useCodeEmptyUrn(int16 targetObjNum) {
 }
 
 void UseCode::genericResponse(int16 useObjNum, int16 targetObjNum, int16 tosIdx) {
+	auto lang = g_engine->getLanguage();
 	_genericResponseCounter++;
 	if (_genericResponseCounter > 4) {
 		_genericResponseCounter = 0;
@@ -1617,40 +1618,80 @@ void UseCode::genericResponse(int16 useObjNum, int16 targetObjNum, int16 tosIdx)
 	case 999:
 		switch (_genericResponseCounter) {
 		case 0:
-			_console->addTextLine(
-				formatInjectStrings(
-					getI18NText(kI18N_genResponse0_usingTheObjectOnTheObjectItMustBeYourHeadachesText),
-					_objectVar.getObjectName(useObjNum).c_str(),
-					_objectVar.getObjectName(targetObjNum).c_str()
-				)
-			);
+			if (lang == Common::KO_KOR) {
+				_console->addTextLine(
+					formatInjectStrings(
+						getI18NText(kI18N_genResponse0_usingTheObjectOnTheObjectItMustBeYourHeadachesText),
+						KoFont::getObjectString(_objectVar.getObjectName(useObjNum)).c_str(),
+						_objectVar.getObjectName(targetObjNum).c_str()
+					)
+				);
+			} else {
+				_console->addTextLine(
+					formatInjectStrings(
+						getI18NText(kI18N_genResponse0_usingTheObjectOnTheObjectItMustBeYourHeadachesText),
+						_objectVar.getObjectName(useObjNum).c_str(),
+						_objectVar.getObjectName(targetObjNum).c_str()
+					)
+				);
+			}
 			break;
 		case 1:
-			_console->addTextLine(
-				formatInjectStrings(
-					getI18NText(kI18N_genResponse1_theObjectWillDoNothingToTheText),
-					_objectVar.getObjectName(useObjNum).c_str(),
-					_objectVar.getObjectName(targetObjNum).c_str()
-				)
-			);
+			if (lang == Common::KO_KOR) {
+				_console->addTextLine(
+					formatInjectStrings(
+						getI18NText(kI18N_genResponse1_theObjectWillDoNothingToTheText),
+						KoFont::getObjectString(_objectVar.getObjectName(useObjNum)).c_str(),
+						_objectVar.getObjectName(targetObjNum).c_str()
+					)
+				);
+			} else {
+				_console->addTextLine(
+					formatInjectStrings(
+						getI18NText(kI18N_genResponse1_theObjectWillDoNothingToTheText),
+						_objectVar.getObjectName(useObjNum).c_str(),
+						_objectVar.getObjectName(targetObjNum).c_str()
+					)
+				);
+			}
 			break;
 		case 2:
-			_console->addTextLine(
-				formatInjectStrings(
-					getI18NText(kI18N_genResponse2_theObjectDoesntHaveAnyEffectOnTheText),
-					_objectVar.getObjectName(useObjNum).c_str(),
-					_objectVar.getObjectName(targetObjNum).c_str()
-				)
-			);
+			if (lang == Common::KO_KOR) {
+				_console->addTextLine(
+					formatInjectStrings(
+						getI18NText(kI18N_genResponse2_theObjectDoesntHaveAnyEffectOnTheText),
+						KoFont::getTopicString(_objectVar.getObjectName(useObjNum)).c_str(),
+						_objectVar.getObjectName(targetObjNum).c_str()
+					)
+				);
+			} else {
+				_console->addTextLine(
+					formatInjectStrings(
+						getI18NText(kI18N_genResponse2_theObjectDoesntHaveAnyEffectOnTheText),
+						_objectVar.getObjectName(useObjNum).c_str(),
+						_objectVar.getObjectName(targetObjNum).c_str()
+					)
+				);
+			}
 			break;
 		case 3:
-			_console->addTextLine(
-				formatInjectStrings(
-					getI18NText(kI18N_genResponse3_theObjectHasNothingToDoWithTheText),
-					_objectVar.getObjectName(useObjNum).c_str(),
-					_objectVar.getObjectName(targetObjNum).c_str()
-				)
-			);
+			if (lang ==Common::KO_KOR) {
+				_console->addTextLine(
+					formatInjectStrings(
+						getI18NText(kI18N_genResponse3_theObjectHasNothingToDoWithTheText),
+						KoFont::getTopicString(_objectVar.getObjectName(useObjNum)).c_str(),
+						KoFont::getLinkingString(_objectVar.getObjectName(targetObjNum)).c_str()
+					)
+				);
+			} else {
+				_console->addTextLine(
+					formatInjectStrings(
+						getI18NText(kI18N_genResponse3_theObjectHasNothingToDoWithTheText),
+						_objectVar.getObjectName(useObjNum).c_str(),
+						_objectVar.getObjectName(targetObjNum).c_str()
+					)
+				);
+			}
 			break;
 		case 4:
 			_console->addTextLine(getI18NText(kI18N_genResponse4_areYouFeelingAlrightText));




More information about the Scummvm-git-logs mailing list