[Scummvm-git-logs] scummvm master -> 98fdc3f1071dc9b8d7d5b5fb72741fb6158fc54a

sev- noreply at scummvm.org
Fri Dec 22 00:48:19 UTC 2023


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

Summary:
e7f1afd669 TSAGE: RINGWORLD: Fix subtitle color
98fdc3f107 TSAGE: RINGWORLD: Added support for Russian CD fan-translation


Commit: e7f1afd669c13b484973cfd4a12bdf58b1602f5d
    https://github.com/scummvm/scummvm/commit/e7f1afd669c13b484973cfd4a12bdf58b1602f5d
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2023-12-22T00:54:52+01:00

Commit Message:
TSAGE: RINGWORLD: Fix subtitle color

Discovered by Russian translators who translated the game

Changed paths:
    engines/tsage/ringworld/ringworld_scenes1.cpp


diff --git a/engines/tsage/ringworld/ringworld_scenes1.cpp b/engines/tsage/ringworld/ringworld_scenes1.cpp
index 431bd34cf8b..c5998b2db16 100644
--- a/engines/tsage/ringworld/ringworld_scenes1.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes1.cpp
@@ -2826,7 +2826,7 @@ void Scene95::Action1::signal() {
 		break;
 	case 5:
 		SceneItem::display(95, 4, SET_Y, 45, SET_FONT, 2,
-			SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 35, SET_WIDTH, 200,
+			SET_BG_COLOR, -1, SET_EXT_BGCOLOR, 13, SET_WIDTH, 200,
 			SET_KEEP_ONSCREEN, 1, LIST_END);
 		setDelay(240);
 		break;


Commit: 98fdc3f1071dc9b8d7d5b5fb72741fb6158fc54a
    https://github.com/scummvm/scummvm/commit/98fdc3f1071dc9b8d7d5b5fb72741fb6158fc54a
Author: Eugene Sandulenko (sev at scummvm.org)
Date: 2023-12-22T01:44:33+01:00

Commit Message:
TSAGE: RINGWORLD: Added support for Russian CD fan-translation

Changed paths:
    NEWS.md
    engines/tsage/core.cpp
    engines/tsage/detection_tables.h
    engines/tsage/ringworld/ringworld_dialogs.cpp
    engines/tsage/ringworld/ringworld_logic.cpp
    engines/tsage/ringworld/ringworld_logic.h
    engines/tsage/ringworld/ringworld_scenes1.cpp
    engines/tsage/ringworld/ringworld_scenes10.cpp
    engines/tsage/ringworld/ringworld_scenes2.cpp
    engines/tsage/ringworld/ringworld_scenes5.cpp
    engines/tsage/ringworld/ringworld_scenes8.cpp
    engines/tsage/scenes.cpp
    engines/tsage/staticres.cpp
    engines/tsage/staticres.h


diff --git a/NEWS.md b/NEWS.md
index baad4f6ea6a..815af3d2688 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -1,7 +1,13 @@
 For a more comprehensive changelog of the latest experimental code, see:
         https://github.com/scummvm/scummvm/commits/
 
-#### 2.8.0 (XXXX-XX-XX)
+#### 2.9.0 (XXXX-XX-XX)
+
+ TsAGE:
+   - Added support for Russian CD fan-translation.
+
+
+#### 2.8.0 (2023-12-30)
 
  New games:
    - Added support for macOS versions of Syberia and Syberia II.
diff --git a/engines/tsage/core.cpp b/engines/tsage/core.cpp
index a01a8dc9783..3456faa76e8 100644
--- a/engines/tsage/core.cpp
+++ b/engines/tsage/core.cpp
@@ -1621,6 +1621,24 @@ void SceneItem::doAction(int action) {
 				msg = ESP_DEFAULT_SCENE_HOTSPOT;
 				break;
 			}
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			switch ((int)action) {
+			case CURSOR_LOOK:
+				msg = RUS_LOOK_SCENE_HOTSPOT;
+				break;
+			case CURSOR_USE:
+				msg = RUS_USE_SCENE_HOTSPOT;
+				break;
+			case CURSOR_TALK:
+				msg = RUS_TALK_SCENE_HOTSPOT;
+				break;
+			case 0x1000:
+				msg = RUS_SPECIAL_SCENE_HOTSPOT;
+				break;
+			default:
+				msg = RUS_DEFAULT_SCENE_HOTSPOT;
+				break;
+			}
 		} else {
 			switch ((int)action) {
 			case CURSOR_LOOK:
@@ -4515,6 +4533,8 @@ void SceneHandler::dispatch() {
 		if (err.getCode() != Common::kNoError) {
 			if (g_vm->getLanguage() == Common::ES_ESP) {
 				GUIErrorMessage(ESP_SAVE_ERROR_MSG);
+			} else if (g_vm->getLanguage() == Common::RU_RUS) {
+				GUIErrorMessage(ESP_SAVE_ERROR_MSG);
 			} else {
 				GUIErrorMessage(SAVE_ERROR_MSG);
 			}
diff --git a/engines/tsage/detection_tables.h b/engines/tsage/detection_tables.h
index 6e998111432..6fb99544f07 100644
--- a/engines/tsage/detection_tables.h
+++ b/engines/tsage/detection_tables.h
@@ -53,6 +53,20 @@ static const tSageGameDescription gameDescriptions[] = {
 		GType_Ringworld,
 		GF_FLOPPY | GF_ALT_REGIONS
 	},
+	// Ringworld Russian CD fan translation V1.0
+	{
+		{
+			"ringworld",
+			"CD",
+			AD_ENTRY1s("ring.rlb", "f36a3ecd7ec297d00c739e3004100c1b", 38761907),
+			Common::RU_RUS,
+			Common::kPlatformDOS,
+			ADGF_CD,
+			GUIO2(GUIO_NOSPEECH, GUIO_NOSFX)
+		},
+		GType_Ringworld,
+		GF_CD | GF_ALT_REGIONS
+	},
 	// Ringworld English Floppy version
 	{
 		{
diff --git a/engines/tsage/ringworld/ringworld_dialogs.cpp b/engines/tsage/ringworld/ringworld_dialogs.cpp
index 36bb43588a1..1ca7f0222b4 100644
--- a/engines/tsage/ringworld/ringworld_dialogs.cpp
+++ b/engines/tsage/ringworld/ringworld_dialogs.cpp
@@ -226,6 +226,8 @@ void OptionsDialog::show() {
 		int rc;
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			rc = MessageDialog::show(ESP_QUIT_CONFIRM_1_MSG, ESP_CANCEL_BTN_STRING, ESP_QUIT_BTN_STRING);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			rc = MessageDialog::show(RUS_QUIT_CONFIRM_MSG, RUS_CANCEL_BTN_STRING, RUS_QUIT_BTN_STRING);
 		} else {
 			rc = MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING);
 		}
@@ -260,6 +262,14 @@ OptionsDialog::OptionsDialog() {
 		_btnQuit.setText(ESP_QUIT_BTN_STRING);
 		_btnSound.setText(ESP_SOUND_BTN_STRING);
 		_btnResume.setText(ESP_RESUME_BTN_STRING);
+	} else if (g_vm->getLanguage() == Common::RU_RUS) {
+		_gfxMessage.set(RUS_OPTIONS_MSG, 140, ALIGN_LEFT);
+		_btnRestore.setText(RUS_RESTORE_BTN_STRING);
+		_btnSave.setText(RUS_SAVE_BTN_STRING);
+		_btnRestart.setText(RUS_RESTART_BTN_STRING);
+		_btnQuit.setText(RUS_QUIT_BTN_STRING);
+		_btnSound.setText(RUS_SOUND_BTN_STRING);
+		_btnResume.setText(RUS_RESUME_BTN_STRING);
 	} else {
 		_gfxMessage.set(OPTIONS_MSG, 140, ALIGN_LEFT);
 		_btnRestore.setText(RESTORE_BTN_STRING);
@@ -320,6 +330,8 @@ void InventoryDialog::show() {
 	if (itemCount == 0) {
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			MessageDialog::show(ESP_INV_EMPTY_MSG, ESP_OK_BTN_STRING);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			MessageDialog::show(RUS_INV_EMPTY_MSG, RUS_OK_BTN_STRING);
 		} else {
 			MessageDialog::show(INV_EMPTY_MSG, OK_BTN_STRING);
 		}
@@ -385,6 +397,9 @@ InventoryDialog::InventoryDialog() {
 	if (g_vm->getLanguage() == Common::ES_ESP) {
 		_btnOk.setText(ESP_OK_BTN_STRING);
 		_btnLook.setText(ESP_LOOK_BTN_STRING);
+	} else if (g_vm->getLanguage() == Common::RU_RUS) {
+		_btnOk.setText(RUS_OK_BTN_STRING);
+		_btnLook.setText(RUS_LOOK_BTN_STRING);
 	} else {
 		_btnOk.setText(OK_BTN_STRING);
 		_btnLook.setText(LOOK_BTN_STRING);
@@ -457,6 +472,16 @@ void InventoryDialog::execute() {
 					lookFlag = 0;
 					g_globals->_events.setCursor(CURSOR_WALK);
 				}
+			} else if (g_vm->getLanguage() == Common::RU_RUS) {
+				if (_btnLook._message == RUS_LOOK_BTN_STRING) {
+					_btnLook._message = RUS_PICK_BTN_STRING;
+					lookFlag = 1;
+					g_globals->_events.setCursor(CURSOR_LOOK);
+				} else {
+					_btnLook._message = RUS_LOOK_BTN_STRING;
+					lookFlag = 0;
+					g_globals->_events.setCursor(CURSOR_WALK);
+				}
 			} else {
 				if (_btnLook._message == LOOK_BTN_STRING) {
 					_btnLook._message = PICK_BTN_STRING;
diff --git a/engines/tsage/ringworld/ringworld_logic.cpp b/engines/tsage/ringworld/ringworld_logic.cpp
index 328c18981ab..8e54361896a 100644
--- a/engines/tsage/ringworld/ringworld_logic.cpp
+++ b/engines/tsage/ringworld/ringworld_logic.cpp
@@ -351,39 +351,40 @@ void SceneArea::synchronize(Serializer &s) {
 
 RingworldInvObjectList::RingworldInvObjectList() :
 		_ESP(g_vm->getLanguage() == Common::ES_ESP),
-		_stunner(2280, 1, 2, OBJECT_STUNNER, _ESP ? "Tu paralizador." : "This is your stunner."),
-		_scanner(1, 1, 3, OBJECT_SCANNER, _ESP ? "Una unidad combinada de esc\240ner y comunicaciones." : "A combination scanner comm unit."),
-		_stasisBox(5200, 1, 4, OBJECT_STASIS_BOX, _ESP ? "Una caja est\240sica." : "A stasis box."),
-		_infoDisk(40, 1, 1, OBJECT_INFODISK, _ESP ? "El infodisk que le cogiste al asesino." : "The infodisk you took from the assassin."),
-		_stasisNegator(0, 2, 2, OBJECT_STASIS_NEGATOR, _ESP ? "El negador de campos est\240sicos." : "The stasis field negator."),
-		_keyDevice(4250, 1, 6, OBJECT_KEY_DEVICE, _ESP ? "Una llave magn\202tica." : "A magnetic key device."),
-		_medkit(2280, 1, 7, OBJECT_MEDKIT, _ESP ? "Tu botiqu\241n." : "Your medkit."),
-		_ladder(4100, 1, 8, OBJECT_LADDER, _ESP ? "La escalera del jefe." : "The chief's ladder."),
-		_rope(4150, 1, 9, OBJECT_ROPE, _ESP ? "La cuerda del jefe." : "The chief's rope."),
-		_key(7700, 1, 11, OBJECT_KEY, _ESP ? "Una llave." : "A key."),
-		_translator(7700, 1, 13, OBJECT_TRANSLATOR,  _ESP ? "La caja traductora delfiniana." : "The dolphin translator box."),
-		_ale(2150, 1, 10, OBJECT_ALE, _ESP ? "Una botella de cerveza." : "A bottle of ale."),
-		_paper(7700, 1, 12, OBJECT_PAPER, _ESP ? "Un trozo de papel con los n\243meros 2,4, y 3 escritos en \202l." : "A slip of paper with the numbers 2,4, and 3 written on it."),
-		_waldos(0, 1, 14, OBJECT_WALDOS, _ESP ? "Un par de brazos de la sonda averiada." : "A pair of waldos from the ruined probe."),
-		_stasisBox2(8100, 1, 4, OBJECT_STASIS_BOX2, _ESP ? "Una caja est\240sica." : "A stasis box."),
-		_ring(8100, 2, 5, OBJECT_RING, _ESP ? "El anillo que te envi\242 Louis Wu." : "This is a signet ring sent to you by Louis Wu."),
-		_cloak(9850, 2, 6, OBJECT_CLOAK, _ESP ? "Una t\243nica de seda fina." : "A fine silk cloak."),
-		_tunic(9450, 2, 7, OBJECT_TUNIC, _ESP ? "La t\243nica manchada del patriarca." : "The patriarch's soiled tunic."),
-		_candle(9500, 2, 8, OBJECT_CANDLE, _ESP ? "Una vela de sebo." : "A tallow candle."),
-		_straw(9400, 2, 9, OBJECT_STRAW, _ESP ? "Paja limpia y seca." : "Clean, dry straw."),
-		_scimitar(9850, 1, 18, OBJECT_SCIMITAR, _ESP ? "La cimitarra del armario del Patriarca." : "A scimitar from the Patriarch's closet."),
-		_sword(9850, 1, 17, OBJECT_SWORD, _ESP ? "La espada corta del armario del Patriarca." : "A short sword from the Patriarch's closet."),
-		_helmet(9500, 2, 4, OBJECT_HELMET, _ESP ? "Un extra\244o yelmo." : "Some type of helmet."),
-		_items(4300, 2, 10, OBJECT_ITEMS, _ESP ? "Dos interesantes objetos de la nave Tnuctipun." : "Two interesting items from the Tnuctipun vessel."),
-		_concentrator(4300, 2, 11, OBJECT_CONCENTRATOR, _ESP ? "El concentrador antimateria Tnuctipun contenido en un campo est\240sico." : "The Tnuctipun anti-matter concentrator contained in a stasis field."),
-		_nullifier(5200, 2, 12, OBJECT_NULLIFIER, _ESP ? "Un anulador de ondas neuronales." : "A purported neural wave nullifier."),
-		_peg(4045, 2, 16, OBJECT_PEG, _ESP ? "Una clavija con un s\241mbolo." : "A peg with a symbol."),
-		_vial(5100, 2, 17, OBJECT_VIAL, _ESP ? "Un frasco con la droga antiferomonas de los murci\202lagos." : "A vial of the bat creatures anti-pheromone drug."),
-		_jacket(9850, 3, 1, OBJECT_JACKET, _ESP ? "Una elegante chaqueta." : "A natty padded jacket."),
-		_tunic2(9850, 3, 2, OBJECT_TUNIC2, _ESP ? "Una t\243nica muy ligera." : "A very hairy tunic."),
-		_bone(5300, 3, 5, OBJECT_BONE, _ESP ? "Un hueso muy afilado." : "A very sharp bone."),
-		_jar(7700, 3, 4, OBJECT_JAR, _ESP ? "Un frasco lleno de una sustancia verde." : "An jar filled with a green substance."),
-		_emptyJar(7700, 3, 3, OBJECT_EMPTY_JAR, _ESP ? "Un frasco vac\241o." : "An empty jar.") {
+		_RUS(g_vm->getLanguage() == Common::RU_RUS),
+		_stunner(2280, 1, 2, OBJECT_STUNNER, _ESP ? "Tu paralizador." : _RUS ? "\x82\xA0\xE8 \xE1\xE2\xA0\xAD\xAD\xA5\xE0." : "This is your stunner."),  // Ваш станнер.
+		_scanner(1, 1, 3, OBJECT_SCANNER, _ESP ? "Una unidad combinada de esc\240ner y comunicaciones." : _RUS ? "\x91\xAA\xA0\xAD\xA5\xE0\x2D\xAA\xAE\xAC\xAC\xE3\xAD\xA8\xAA\xA0\xE2\xAE\xE0." : "A combination scanner comm unit."),  // Сканер-коммуникатор.
+		_stasisBox(5200, 1, 4, OBJECT_STASIS_BOX, _ESP ? "Una caja est\240sica." : _RUS ? "\x8A\xAE\xAD\xE2\xA5\xA9\xAD\xA5\xE0." : "A stasis box."),  // Контейнер.
+		_infoDisk(40, 1, 1, OBJECT_INFODISK, _ESP ? "El infodisk que le cogiste al asesino." : _RUS ? "\x88\xA7\xEA\xEF\xE2\xEB\xA9 \xE3 \xAA\xA8\xAB\xAB\xA5\xE0\xA0 \xA8\xAD\xE4\xAE\xA4\xA8\xE1\xAA." : "The infodisk you took from the assassin."),  // Изъятый у киллера инфодиск.
+		_stasisNegator(0, 2, 2, OBJECT_STASIS_NEGATOR, _ESP ? "El negador de campos est\240sicos." : _RUS ? "\x88\xAD\xA2\xA5\xE0\xE2\xAE\xE0 \xE1\xE2\xA0\xA7\xA8\xE1\x2D\xAF\xAE\xAB\xEF." : "The stasis field negator."),  // Инвертор стазис-поля.
+		_keyDevice(4250, 1, 6, OBJECT_KEY_DEVICE, _ESP ? "Una llave magn\202tica." : _RUS ? "\x8C\xA0\xA3\xAD\xA8\xE2\xAD\xEB\xA9 \xAA\xAB\xEE\xE7." : "A magnetic key device."),  // Магнитный ключ.
+		_medkit(2280, 1, 7, OBJECT_MEDKIT, _ESP ? "Tu botiqu\241n." : _RUS ? "\x80\xAF\xE2\xA5\xE7\xAA\xA0." : "Your medkit."),  // Аптечка.
+		_ladder(4100, 1, 8, OBJECT_LADDER, _ESP ? "La escalera del jefe." : _RUS ? "\x8B\xA5\xE1\xE2\xAD\xA8\xE6\xA0 \xA2\xAE\xA6\xA4\xEF." : "The chief's ladder."),  // Лестница вождя.
+		_rope(4150, 1, 9, OBJECT_ROPE, _ESP ? "La cuerda del jefe." : _RUS ? "\x82\xA5\xE0\xF1\xA2\xAA\xA0 \xA2\xAE\xA6\xA4\xEF." : "The chief's rope."),  // Верёвка вождя.
+		_key(7700, 1, 11, OBJECT_KEY, _ESP ? "Una llave." : _RUS ? "\x8A\xAB\xEE\xE7." : "A key."),  // Ключ.
+		_translator(7700, 1, 13, OBJECT_TRANSLATOR,  _ESP ? "La caja traductora delfiniana." : _RUS ? "\x8F\xA5\xE0\xA5\xA2\xAE\xA4\xE7\xA8\xAA \xE1 \xA4\xA5\xAB\xEC\xE4\xA8\xAD\xEC\xA5\xA3\xAE." : "The dolphin translator box."),  // Переводчик с дельфиньего.
+		_ale(2150, 1, 10, OBJECT_ALE, _ESP ? "Una botella de cerveza." : _RUS ? "\x81\xE3\xE2\xEB\xAB\xAA\xA0 \xED\xAB\xEF." : "A bottle of ale."),  // Бутылка эля.
+		_paper(7700, 1, 12, OBJECT_PAPER, _ESP ? "Un trozo de papel con los n\243meros 2,4, y 3 escritos en \202l." : _RUS ? "\x8D\xA0 \xAA\xAB\xAE\xE7\xAA\xA5 \xA1\xE3\xAC\xA0\xA3\xA8 \xAD\xA0\xE7\xA5\xE0\xE2\xA0\xAD\xEB \xE6\xA8\xE4\xE0\xEB 2, 4, 3." : "A slip of paper with the numbers 2,4, and 3 written on it."),  // На клочке бумаги начертаны цифры 2, 4, 3.
+		_waldos(0, 1, 14, OBJECT_WALDOS, _ESP ? "Un par de brazos de la sonda averiada." : _RUS ? "\x8C\xA0\xAD\xA8\xAF\xE3\xAB\xEF\xE2\xAE\xE0\xEB \xE1\xAE \xE1\xAB\xAE\xAC\xA0\xAD\xAD\xAE\xA3\xAE \xA7\xAE\xAD\xA4\xA0." : "A pair of waldos from the ruined probe."),  // Манипуляторы со сломанного зонда.
+		_stasisBox2(8100, 1, 4, OBJECT_STASIS_BOX2, _ESP ? "Una caja est\240sica." : _RUS ? "\x8A\xAE\xAD\xE2\xA5\xA9\xAD\xA5\xE0." : "A stasis box."),  // Контейнер.
+		_ring(8100, 2, 5, OBJECT_RING, _ESP ? "El anillo que te envi\242 Louis Wu." : _RUS ? "\x9D\xE2\xAE\xE2 \xAF\xA5\xE0\xE1\xE2\xA5\xAD\xEC \xA2\xEB \xAF\xAE\xAB\xE3\xE7\xA8\xAB\xA8 \xAE\xE2 \x8B\xE3\xA8\xE1\xA0 \x82\xE3." : "This is a signet ring sent to you by Louis Wu."),  // Этот перстень вы получили от Луиса Ву.
+		_cloak(9850, 2, 6, OBJECT_CLOAK, _ESP ? "Una t\243nica de seda fina." : _RUS ? "\x98\xF1\xAB\xAA\xAE\xA2\xA0\xEF \xE2\xE3\xAD\xA8\xAA\xA0." : "A fine silk cloak."),  // Шёлковая туника.
+		_tunic(9450, 2, 7, OBJECT_TUNIC, _ESP ? "La t\243nica manchada del patriarca." : _RUS ? "\x83\xE0\xEF\xA7\xAD\xA0\xEF \xE2\xE3\xAD\xA8\xAA\xA0 \x8F\xA0\xE2\xE0\xA8\xA0\xE0\xE5\xA0." : "The patriarch's soiled tunic."),  // Грязная туника Патриарха.
+		_candle(9500, 2, 8, OBJECT_CANDLE, _ESP ? "Una vela de sebo." : _RUS ? "\x91\xA0\xAB\xEC\xAD\xA0\xEF \xE1\xA2\xA5\xE7\xA0." : "A tallow candle."),  // Сальная свеча.
+		_straw(9400, 2, 9, OBJECT_STRAW, _ESP ? "Paja limpia y seca." : _RUS ? "\x91\xE3\xE5\xA0\xEF \xA8 \xE7\xA8\xE1\xE2\xA0\xEF." : "Clean, dry straw."),  // Сухая и чистая.
+		_scimitar(9850, 1, 18, OBJECT_SCIMITAR, _ESP ? "La cimitarra del armario del Patriarca." : _RUS ? "\x91\xAA\xA8\xAC\xA8\xE2\xA0\xE0 \xA8\xA7 \xE8\xAA\xA0\xE4\xA0 \x8F\xA0\xE2\xE0\xA8\xA0\xE0\xE5\xA0." : "A scimitar from the Patriarch's closet."),  // Скимитар из шкафа Патриарха.
+		_sword(9850, 1, 17, OBJECT_SWORD, _ESP ? "La espada corta del armario del Patriarca." : _RUS ? "\x8A\xAE\xE0\xAE\xE2\xAA\xA8\xA9 \xAC\xA5\xE7 \xA8\xA7 \xE8\xAA\xA0\xE4\xA0 \x8F\xA0\xE2\xE0\xA8\xA0\xE0\xE5\xA0." : "A short sword from the Patriarch's closet."),  // Короткий меч из шкафа Патриарха.
+		_helmet(9500, 2, 4, OBJECT_HELMET, _ESP ? "Un extra\244o yelmo." : _RUS ? "\x91\xE2\xE0\xA0\xAD\xAD\xEB\xA9 \xE8\xAB\xA5\xAC." : "Some type of helmet."),  // Странный шлем.
+		_items(4300, 2, 10, OBJECT_ITEMS, _ESP ? "Dos interesantes objetos de la nave Tnuctipun." : _RUS ? "\x8B\xEE\xA1\xAE\xAF\xEB\xE2\xAD\xEB\xA5 \xA2\xA5\xE9\xA8\xE6\xEB \xE1 \xAA\xAE\xE0\xA0\xA1\xAB\xEF \xE2\xAD\xE3\xAA\xE2\xA8\xAF\xE3\xAD\xAE\xA2." : "Two interesting items from the Tnuctipun vessel."),  // Любопытные вещицы с корабля тнуктипунов.
+		_concentrator(4300, 2, 11, OBJECT_CONCENTRATOR, _ESP ? "El concentrador antimateria Tnuctipun contenido en un campo est\240sico." : _RUS ? "\x8A\xAE\xAD\xE6\xA5\xAD\xE2\xE0\xA0\xE2\xAE\xE0 \xA0\xAD\xE2\xA8\xA2\xA5\xE9\xA5\xE1\xE2\xA2\xA0 \xA2 \xE1\xE2\xA0\xA7\xA8\xE1\xAD\xAE\xAC \xAF\xAE\xAB\xA5." : "The Tnuctipun anti-matter concentrator contained in a stasis field."),  // Концентратор антивещества в стазисном поле.
+		_nullifier(5200, 2, 12, OBJECT_NULLIFIER, _ESP ? "Un anulador de ondas neuronales." : _RUS ? "\x82\xE0\xAE\xA4\xA5 \xA1\xEB \xAD\xA5\xA2\xE0\xA0\xAB\xEC\xAD\xEB\xA9 \xAD\xA5\xA9\xE2\xE0\xA0\xAB\xA8\xA7\xA0\xE2\xAE\xE0." : "A purported neural wave nullifier."),  // Вроде бы невральный нейтрализатор.
+		_peg(4045, 2, 16, OBJECT_PEG, _ESP ? "Una clavija con un s\241mbolo." : _RUS ? "\x8A\xAE\xAB\xEB\xE8\xA5\xAA \xE1 \xE1\xA8\xAC\xA2\xAE\xAB\xAE\xAC." : "A peg with a symbol."),  // Колышек с символом.
+		_vial(5100, 2, 17, OBJECT_VIAL, _ESP ? "Un frasco con la droga antiferomonas de los murci\202lagos." : _RUS ? "\x8F\xE3\xA7\xEB\xE0\xF1\xAA \xE1 \xA0\xAD\xE2\xA8\xE4\xA5\xE0\xAE\xAC\xAE\xAD\xAE\xAC." : "A vial of the bat creatures anti-pheromone drug."),  // Пузырёк с антиферомоном.
+		_jacket(9850, 3, 1, OBJECT_JACKET, _ESP ? "Una elegante chaqueta." : _RUS ? "\x93\xE2\xA5\xAF\xAB\xF1\xAD\xAD\xA0\xEF \xE2\xE3\xAD\xA8\xAA\xA0." : "A natty padded jacket."),  // Утеплённая туника.
+		_tunic2(9850, 3, 2, OBJECT_TUNIC2, _ESP ? "Una t\243nica muy ligera." : _RUS ? "\x8F\xE3\xE8\xA8\xE1\xE2\xA0\xEF \xE2\xE3\xAD\xA8\xAA\xA0." : "A very hairy tunic."),  // Пушистая туника.
+		_bone(5300, 3, 5, OBJECT_BONE, _ESP ? "Un hueso muy afilado." : _RUS ? "\x82\xAE\xE1\xE2\xE0\xA0\xEF \xAA\xAE\xE1\xE2\xEC." : "A very sharp bone."),  // Вострая кость.
+		_jar(7700, 3, 4, OBJECT_JAR, _ESP ? "Un frasco lleno de una sustancia verde." : _RUS ? "\x91\xAE\xE1\xE3\xA4 \xE1 \xA7\xA5\xAB\xF1\xAD\xAE\xA9 \xE1\xE3\xA1\xE1\xE2\xA0\xAD\xE6\xA8\xA5\xA9." : "An jar filled with a green substance."),  // Сосуд с зелёной субстанцией.
+		_emptyJar(7700, 3, 3, OBJECT_EMPTY_JAR, _ESP ? "Un frasco vac\241o." : _RUS ? "\x8F\xE3\xE1\xE2\xAE\xA9 \xE1\xAE\xE1\xE3\xA4." : "An empty jar.") {  // Пустой сосуд.
 
 	// Add the items to the list
 	_itemList.push_back(&_stunner);
@@ -523,6 +524,8 @@ void RingworldGame::endGame(int resNum, int lineNum) {
 		int rc;
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			rc = MessageDialog::show(msg, ESP_QUIT_BTN_STRING, ESP_RESTART_BTN_2_STRING);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			rc = MessageDialog::show(msg, RUS_QUIT_BTN_STRING, RUS_RESTART_BTN_STRING);
 		} else {
 			rc = MessageDialog::show(msg, QUIT_BTN_STRING, RESTART_BTN_STRING);
 		}
@@ -540,6 +543,8 @@ void RingworldGame::endGame(int resNum, int lineNum) {
 				int rc;
 				if (g_vm->getLanguage() == Common::ES_ESP) {
 					rc = MessageDialog::show(msg, ESP_RESTART_BTN_2_STRING, ESP_RESTORE_BTN_STRING);
+				} else if (g_vm->getLanguage() == Common::RU_RUS) {
+					rc = MessageDialog::show(msg, RUS_RESTART_BTN_STRING, RUS_RESTORE_BTN_STRING);
 				} else {
 					rc = MessageDialog::show(msg, RESTART_BTN_STRING, RESTORE_BTN_STRING);
 				}
@@ -564,6 +569,8 @@ void RingworldGame::processEvent(Event &event) {
 			// F1 - Help
 			if (g_vm->getLanguage() == Common::ES_ESP) {
 				MessageDialog::show(ESP_HELP_MSG, ESP_OK_BTN_STRING);
+			} else if (g_vm->getLanguage() == Common::RU_RUS) {
+				MessageDialog::show(RUS_HELP_MSG, RUS_OK_BTN_STRING);
 			} else {
 				MessageDialog::show(HELP_MSG, OK_BTN_STRING);
 			}
@@ -597,6 +604,8 @@ void RingworldGame::processEvent(Event &event) {
 			GfxDialog::setPalette();
 			if (g_vm->getLanguage() == Common::ES_ESP) {
 				MessageDialog::show(ESP_GAME_PAUSED_MSG, ESP_CONTINUE_BTN_STRING);
+			} else if (g_vm->getLanguage() == Common::RU_RUS) {
+				MessageDialog::show(RUS_GAME_PAUSED_MSG, RUS_CONTINUE_BTN_STRING);
 			} else {
 				MessageDialog::show(GAME_PAUSED_MSG, CONTINUE_BTN_STRING);
 			}
diff --git a/engines/tsage/ringworld/ringworld_logic.h b/engines/tsage/ringworld/ringworld_logic.h
index 8c068b7973e..6117fa425ec 100644
--- a/engines/tsage/ringworld/ringworld_logic.h
+++ b/engines/tsage/ringworld/ringworld_logic.h
@@ -105,6 +105,7 @@ public:
 class RingworldInvObjectList : public InvObjectList {
 private:
 	bool _ESP;
+	bool _RUS;
 public:
 	InvObject _stunner;
 	InvObject _scanner;
diff --git a/engines/tsage/ringworld/ringworld_scenes1.cpp b/engines/tsage/ringworld/ringworld_scenes1.cpp
index c5998b2db16..882e4694ea3 100644
--- a/engines/tsage/ringworld/ringworld_scenes1.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes1.cpp
@@ -2479,6 +2479,8 @@ void Scene60::signal() {
 
 			if (g_vm->getLanguage() == Common::ES_ESP) {
 				_gfxButton.setText(ESP_EXIT_MSG);
+			} else if (g_vm->getLanguage() == Common::RU_RUS) {
+				_gfxButton.setText(RUS_EXIT_MSG);
 			} else {
 				_gfxButton.setText(EXIT_MSG);
 			}
@@ -2916,6 +2918,8 @@ void Scene6100::Action1::signal() {
 	case 0:
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			scene->showMessage(ESP_SCENE6100_CAREFUL, 13, this);
+		} if (g_vm->getLanguage() == Common::RU_RUS) {
+			scene->showMessage(RUS_SCENE6100_CAREFUL, 13, this);
 		} else {
 			scene->showMessage(SCENE6100_CAREFUL, 13, this);
 		}
@@ -2923,6 +2927,8 @@ void Scene6100::Action1::signal() {
 	case 1:
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			scene->showMessage(ESP_SCENE6100_TOUGHER, 35, this);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			scene->showMessage(RUS_SCENE6100_TOUGHER, 35, this);
 		} else {
 			scene->showMessage(SCENE6100_TOUGHER, 35, this);
 		}
@@ -2943,6 +2949,8 @@ void Scene6100::Action2::signal() {
 	case 0:
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			scene->showMessage(ESP_SCENE6100_ONE_MORE_HIT, 13, this);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			scene->showMessage(RUS_SCENE6100_ONE_MORE_HIT, 13, this);
 		} else {
 			scene->showMessage(SCENE6100_ONE_MORE_HIT, 13, this);
 		}
@@ -2950,6 +2958,8 @@ void Scene6100::Action2::signal() {
 	case 1:
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			scene->showMessage(ESP_SCENE6100_DOING_BEST, 35, this);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			scene->showMessage(RUS_SCENE6100_DOING_BEST, 35, this);
 		} else {
 			scene->showMessage(SCENE6100_DOING_BEST, 35, this);
 		}
@@ -2991,6 +3001,8 @@ void Scene6100::Action3::signal() {
 	case 2:
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			scene->showMessage(ESP_SCENE6100_REPAIR, 7, this);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			scene->showMessage(RUS_SCENE6100_REPAIR, 7, this);
 		} else {
 			scene->showMessage(SCENE6100_REPAIR, 7, this);
 		}
@@ -3018,6 +3030,8 @@ void Scene6100::Action4::signal() {
 	case 0:
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			scene->showMessage(ESP_SCENE6100_ROCKY_AREA, 13, this);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			scene->showMessage(RUS_SCENE6100_ROCKY_AREA, 13, this);
 		} else {
 			scene->showMessage(SCENE6100_ROCKY_AREA, 13, this);
 		}
@@ -3025,6 +3039,8 @@ void Scene6100::Action4::signal() {
 	case 1:
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			scene->showMessage(ESP_SCENE6100_REPLY, 35, this);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			scene->showMessage(RUS_SCENE6100_REPLY, 35, this);
 		} else {
 			scene->showMessage(SCENE6100_REPLY, 35, this);
 		}
@@ -3156,6 +3172,8 @@ void Scene6100::GetBoxAction::signal() {
 	case 1: {
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			scene->showMessage(ESP_SCENE6100_TAKE_CONTROLS, 35, this);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			scene->showMessage(RUS_SCENE6100_TAKE_CONTROLS, 35, this);
 		} else {
 			scene->showMessage(SCENE6100_TAKE_CONTROLS, 35, this);
 		}
@@ -3170,6 +3188,8 @@ void Scene6100::GetBoxAction::signal() {
 		scene->_probe._percent = 4;
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			scene->showMessage(ESP_SCENE6100_SURPRISE, 13, this);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			scene->showMessage(RUS_SCENE6100_SURPRISE, 13, this);
 		} else {
 			scene->showMessage(SCENE6100_SURPRISE, 13, this);
 		}
@@ -3177,6 +3197,8 @@ void Scene6100::GetBoxAction::signal() {
 	case 3:
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			scene->showMessage(ESP_SCENE6100_SWEAT, 35, this);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			scene->showMessage(RUS_SCENE6100_SWEAT, 35, this);
 		} else {
 			scene->showMessage(SCENE6100_SWEAT, 35, this);
 		}
@@ -3184,6 +3206,8 @@ void Scene6100::GetBoxAction::signal() {
 	case 4:
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			scene->showMessage(ESP_SCENE6100_VERY_WELL, 13, this);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			scene->showMessage(RUS_SCENE6100_VERY_WELL, 13, this);
 		} else {
 			scene->showMessage(SCENE6100_VERY_WELL, 13, this);
 		}
diff --git a/engines/tsage/ringworld/ringworld_scenes10.cpp b/engines/tsage/ringworld/ringworld_scenes10.cpp
index f8a5bc31b34..f33667a810b 100644
--- a/engines/tsage/ringworld/ringworld_scenes10.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes10.cpp
@@ -1244,6 +1244,8 @@ void Scene9700::signal() {
 	case 9702:
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			_gfxButton1.setText(ESP_EXIT_MSG);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			_gfxButton1.setText(RUS_EXIT_MSG);
 		} else {
 			_gfxButton1.setText(EXIT_MSG);
 		}
diff --git a/engines/tsage/ringworld/ringworld_scenes2.cpp b/engines/tsage/ringworld/ringworld_scenes2.cpp
index cac054eb476..9799250d1d9 100644
--- a/engines/tsage/ringworld/ringworld_scenes2.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes2.cpp
@@ -130,6 +130,8 @@ void Scene1000::Action3::signal() {
 			int rc;
 			if (g_vm->getLanguage() == Common::ES_ESP) {
 				rc = MessageDialog::show2(ESP_WATCH_INTRO_MSG, ESP_START_PLAY_BTN_STRING, ESP_INTRODUCTION_BTN_STRING);
+			} else if (g_vm->getLanguage() == Common::RU_RUS) {
+				rc = MessageDialog::show2(RUS_WATCH_INTRO_MSG, RUS_START_PLAY_BTN_STRING, RUS_INTRODUCTION_BTN_STRING);
 			} else {
 				rc = MessageDialog::show2(WATCH_INTRO_MSG, START_PLAY_BTN_STRING, INTRODUCTION_BTN_STRING);
 			}
diff --git a/engines/tsage/ringworld/ringworld_scenes5.cpp b/engines/tsage/ringworld/ringworld_scenes5.cpp
index 933f8e2d5e3..4c692f3e55a 100644
--- a/engines/tsage/ringworld/ringworld_scenes5.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes5.cpp
@@ -4297,6 +4297,8 @@ void Scene4300::signal() {
 
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			_gfxButton.setText(ESP_EXIT_MSG);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			_gfxButton.setText(RUS_EXIT_MSG);
 		} else {
 			_gfxButton.setText(EXIT_MSG);
 		}
diff --git a/engines/tsage/ringworld/ringworld_scenes8.cpp b/engines/tsage/ringworld/ringworld_scenes8.cpp
index 1721b35d3b2..405b4949eb6 100644
--- a/engines/tsage/ringworld/ringworld_scenes8.cpp
+++ b/engines/tsage/ringworld/ringworld_scenes8.cpp
@@ -2139,6 +2139,8 @@ void Scene7700::Object8::doAction(int action) {
 
 			if (g_vm->getLanguage() == Common::ES_ESP) {
 				scene->_gfxButton.setText(ESP_EXIT_MSG);
+			} else if (g_vm->getLanguage() == Common::RU_RUS) {
+				scene->_gfxButton.setText(RUS_EXIT_MSG);
 			} else {
 				scene->_gfxButton.setText(EXIT_MSG);
 			}
@@ -2156,6 +2158,8 @@ void Scene7700::Object8::doAction(int action) {
 
 			if (g_vm->getLanguage() == Common::ES_ESP) {
 				scene->_gfxButton.setText(ESP_EXIT_MSG);
+			} else if (g_vm->getLanguage() == Common::RU_RUS) {
+				scene->_gfxButton.setText(RUS_EXIT_MSG);
 			} else {
 				scene->_gfxButton.setText(EXIT_MSG);
 			}
diff --git a/engines/tsage/scenes.cpp b/engines/tsage/scenes.cpp
index 17181c5edaa..b3f9d8bfd03 100644
--- a/engines/tsage/scenes.cpp
+++ b/engines/tsage/scenes.cpp
@@ -573,6 +573,8 @@ void Game::restartGame() {
 		else {
 			rc = MessageDialog::show(BlueForce::ESP_RESTART_MSG, ESP_CANCEL_BTN_STRING, BlueForce::ESP_RESTART_BTN_2_STRING);
 		}
+	} else if (g_vm->getLanguage() == Common::RU_RUS) {
+		rc = MessageDialog::show(TsAGE::Ringworld::RUS_RESTART_MSG, RUS_CANCEL_BTN_STRING, TsAGE::Ringworld::RUS_RESTART_BTN_STRING);
 	} else {
 		rc = MessageDialog::show(RESTART_MSG, CANCEL_BTN_STRING, RESTART_BTN_STRING);
 	}
@@ -584,6 +586,8 @@ void Game::saveGame() {
 	if (!g_vm->canSaveGameStateCurrently())
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			MessageDialog::show(ESP_SAVING_NOT_ALLOWED_MSG, ESP_OK_BTN_STRING);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			MessageDialog::show(RUS_SAVING_NOT_ALLOWED_MSG, RUS_OK_BTN_STRING);
 		} else {
 			MessageDialog::show(SAVING_NOT_ALLOWED_MSG, OK_BTN_STRING);
 		}
@@ -597,6 +601,8 @@ void Game::restoreGame() {
 	if (!g_vm->canLoadGameStateCurrently())
 		if (g_vm->getLanguage() == Common::ES_ESP) {
 			MessageDialog::show(ESP_RESTORING_NOT_ALLOWED_MSG, ESP_OK_BTN_STRING);
+		} else if (g_vm->getLanguage() == Common::RU_RUS) {
+			MessageDialog::show(RUS_RESTORING_NOT_ALLOWED_MSG, RUS_OK_BTN_STRING);
 		} else {
 			MessageDialog::show(RESTORING_NOT_ALLOWED_MSG, OK_BTN_STRING);
 		}
@@ -615,6 +621,8 @@ void Game::quitGame() {
 		else {
 			rc = MessageDialog::show(BlueForce::ESP_QUIT_CONFIRM_MSG, ESP_CANCEL_BTN_STRING, BlueForce::ESP_QUIT_BTN_STRING);
 		}
+	} else if (g_vm->getLanguage() == Common::RU_RUS) {
+		rc = MessageDialog::show(TsAGE::Ringworld::RUS_QUIT_CONFIRM_MSG, RUS_CANCEL_BTN_STRING, TsAGE::Ringworld::RUS_QUIT_BTN_STRING);
 	} else {
 		rc = MessageDialog::show(QUIT_CONFIRM_MSG, CANCEL_BTN_STRING, QUIT_BTN_STRING);
 	}
diff --git a/engines/tsage/staticres.cpp b/engines/tsage/staticres.cpp
index 7b10c9952f9..b9feeb8fc7f 100644
--- a/engines/tsage/staticres.cpp
+++ b/engines/tsage/staticres.cpp
@@ -108,6 +108,25 @@ char const *const ESP_SOUND_BTN_STRING = "Sonido";
 char const *const ESP_LOOK_BTN_STRING = "Mirar";
 char const *const ESP_PICK_BTN_STRING = "Escoger";
 
+// Russian version
+char const *const RUS_LOOK_SCENE_HOTSPOT = "\x8D\xA8\xE7\xA5\xA3\xAE \xAD\xA5\xAE\xA1\xEB\xE7\xAD\xAE\xA3\xAE."; // "Ничего необычного."
+char const *const RUS_USE_SCENE_HOTSPOT = "\x22\x81\xA5\xE1\xAF\xAE\xAB\xA5\xA7\xAD\xAE."; // "Бесполезно."
+char const *const RUS_TALK_SCENE_HOTSPOT = "\x81\xAB\xA0-\xA1\xAB\xA0."; // "Бла-бла."
+char const *const RUS_SPECIAL_SCENE_HOTSPOT = "\x22\x8D\xA0\xA4\xAE \xA6\xA5 \xA4\xAE\xA4\xE3\xAC\xA0\xE2\xEC\xE1\xEF \xA4\xAE \xE2\xA0\xAA\xAE\xA3\xAE."; // "Надо же додуматься до такого."
+char const *const RUS_DEFAULT_SCENE_HOTSPOT = "\x81\xA5\xE1\xAF\xAE\xAB\xA5\xA7\xAD\xAE."; // "Бесполезно."
+char const *const RUS_SAVE_ERROR_MSG = "\x8E\xE8\xA8\xA1\xAA\xA0 \xA7\xA0\xA3\xE0\xE3\xA7\xAA\xA8 \xE1\xAE\xE5\xE0\xA0\xAD\xF1\xAD\xAD\xAE\xA9 \xA8\xA3\xE0\xEB!"; // "Ошибка загрузки сохранённой игры!"
+char const *const RUS_SAVING_NOT_ALLOWED_MSG = "\x91\xA5\xA9\xE7\xA0\xE1 \xA7\xA0\xAF\xA8\xE1\xEC \xAD\xA5\xA2\xAE\xA7\xAC\xAE\xA6\xAD."; // "Сейчас запись невозможна."
+char const *const RUS_RESTORING_NOT_ALLOWED_MSG = "\x87\xA0\xA3\xE0\xE3\xA7\xAA\xA0 \xAD\xA5\xA2\xAE\xA7\xAC\xAE\xA6\xAD\xA0."; // "Загрузка невозможна."
+char const *const RUS_INV_EMPTY_MSG = "\x22\x88\xAD\xA2\xA5\xAD\xE2\xA0\xE0\xEC \xAF\xE3\xE1\xE2."; // "Инвентарь пуст."
+
+char const *const RUS_OK_BTN_STRING = " \x4F\x6B "; // " Ok "
+char const *const RUS_CONTINUE_BTN_STRING = "\x84\xA0\xAB\xA5\xA5"; // "Далее"
+char const *const RUS_CANCEL_BTN_STRING = "\x8E\xE2\xAC\xA5\xAD\xA0"; // "Отмена"
+char const *const RUS_RESTORE_BTN_STRING = "\x91\xE7\xA8\xE2\xA0\xE2\xEC"; // "Считать"
+char const *const RUS_SOUND_BTN_STRING = "  \x87\xA2\xE3\xAA  "; // "  Звук  "
+char const *const RUS_LOOK_BTN_STRING = "\x83\xAB\xA0\xA7"; // "Глаз"
+char const *const RUS_PICK_BTN_STRING = "\x90\xE3\xAA\xA0"; // "Рука"
+
 namespace Ringworld {
 
 // Dialog resources
@@ -182,6 +201,36 @@ char const *const ESP_SCENE6100_SWEAT = "Los humanos sudan, los Kzinti mueven co
 char const *const ESP_SCENE6100_VERY_WELL = "Muy bien. Recoger\202 la caja est\240sica y traer\202 la \
 sonda. Espera en la bodega de carga.";
 
+// Russian version
+char const *const RUS_QUIT_CONFIRM_MSG = "\x82\xEB \xE5\xAE\xE2\xA8\xE2\xA5 \xA2\xEB\xA9\xE2\xA8 \xA8\xA7 \xA8\xA3\xE0\xEB?"; // "Вы хотите выйти из игры?"
+char const *const RUS_RESTART_MSG = "\x82\xEB \xE5\xAE\xE2\xA8\xE2\xA5 \xAD\xA0\xE7\xA0\xE2\xEC \xA7\xA0\xAD\xAE\xA2\xAE?"; // "Вы хотите начать заново?"
+char const *const RUS_GAME_PAUSED_MSG = "  \x8F\xA0\xE3\xA7\xA0.  "; // "  Пауза.  ";
+char const *const RUS_QUIT_BTN_STRING = " \x82\xEB\xA9\xE2\xA8"; // " Выйти";
+char const *const RUS_RESTART_BTN_STRING = "\x87\xA0\xAD\xAE\xA2\xAE"; // "Заново";
+char const *const RUS_SAVE_BTN_STRING = " \x87\xA0\xAF\xA8\xE1\xEC "; // " Запись ";
+char const *const RUS_RESUME_BTN_STRING = " \x8D\xA0\xA7\xA0\xA4 \xA2\r\xA8\xA3\xE0\xE3"; // " Назад в\rигру";
+
+// Dialog resources
+char const *const RUS_HELP_MSG = "\x8C\xA8\xE0\x2D\x8A\xAE\xAB\xEC\xE6\xAE\r\x8C\xA5\xE1\xE2\xEC \x8F\xA0\xE2\xE0\xA8\xA0\xE0\xE5\xA0\x14\r\x82\xA5\xE0\xE1\xA8\xEF ScummVM\r\r\x01 \x83\xAE\xE0\xEF\xE7\xA8\xA5 \xAA\xAB\xA0\xA2\xA8\xE8\xA8\rF2 - \x87\xA2\xE3\xAA\rF3 - \x82\xEB\xA9\xE2\xA8\rF4 - \x87\xA0\xAD\xAE\xA2\xAE\rF5 - \x87\xA0\xAF\xA8\xE1\xEC\rF7 - \x91\xE7\xA8\xE2\xA0\xE2\xEC\rF10 - \x8F\xA0\xE3\xA7\xA0"; // "Мир-Кольцо\rМесть Патриарха\x14\rВерсия ScummVM\r\r\x01 Горячие клавиши\rF2 - Звук\rF3 - Выйти\rF4 - Заново\rF5 - Запись\rF6 - Считать\rF7 - Пауза"
+char const *const RUS_WATCH_INTRO_MSG = "    \x8F\xAE\xE1\xAC\xAE\xE2\xE0\xA5\xE2\xEC \xA2\xE1\xE2\xE3\xAF\xAB\xA5\xAD\xA8\xA5?    "; // "    Посмотреть вступление?    "
+char const *const RUS_START_PLAY_BTN_STRING = " \x8D\xA0\xE7\xA0\xE2\xEC  "; // " Начать ";
+char const *const RUS_INTRODUCTION_BTN_STRING = " \x82\xE1\xE2\xE3\xAF\xAB\xA5\xAD\xA8\xA5 "; // " Вступление ";
+char const *const RUS_OPTIONS_MSG = "\x01\x8D\xA0\xE1\xE2\xE0\xAE\xA9\xAA\xA8"; // "\x01Настройки"
+
+// Scene specific resources
+char const *const RUS_EXIT_MSG = " \x82\xEB\xA9\xE2\xA8 "; // " Выйти "
+char const *const RUS_SCENE6100_CAREFUL = "\x8E\xE1\xE2\xAE\xE0\xAE\xA6\xAD\xAE\x21 \x87\xAE\xAD\xA4 \xAC\xAE\xA6\xA5\xE2 \xAD\xA5 \xA2\xEB\xA4\xA5\xE0\xA6\xA0\xE2\xEC."; // "Осторожно! Зонд может не выдержать."
+char const *const RUS_SCENE6100_TOUGHER = "\x9D\xA9\x21 \x9D\xE2\xAE \xE1\xAB\xAE\xA6\xAD\xA5\xA5, \xE7\xA5\xAC \xAA\xA0\xA6\xA5\xE2\xE1\xEF!"; // "Эй! Это сложнее, чем кажется!"
+char const *const RUS_SCENE6100_ONE_MORE_HIT = "\x8D\xA5 \xA7\xA5\xA2\xA0\xA9 \xAF\xAE \xE1\xE2\xAE\xE0\xAE\xAD\xA0\xAC. \x85\xE9\xF1 \xAE\xA4\xA8\xAD \xE2\xA0\xAA\xAE\xA9 \xE3\xA4\xA0\xE0, \xA8 \xA7\xAE\xAD\xA4 \xAC\xAE\xA6\xA5\xE2 \xE0\xA0\xA7\xA2\xA0\xAB\xA8\xE2\xEC\xE1\xEF."; // "Не зевай по сторонам. Ещё один такой удар, и зонд может развалиться."
+char const *const RUS_SCENE6100_DOING_BEST = "\x91\xE2\xA0\xE0\xA0\xEE\xE1\xEC. \x8D\xA0\xA4\xA5\xEE\xE1\xEC, \xED\xE2\xA0 \xE8\xE3\xE2\xAA\xA0 \xA2\xEB\xA4\xA5\xE0\xA6\xA8\xE2!"; // "Стараюсь. Надеюсь, эта шутка выдержит!"
+char const *const RUS_SCENE6100_REPAIR = "\r\r\x8A\xE3\xA8\xAD \xA8 \x88\xE9\xE3\xE9\xA8\xA9 \xE7\xA8\xAD\xEF\xE2 \xA7\xAE\xAD\xA4..."; // "\r\rКуин и Ищущий чинят зонд..."
+char const *const RUS_SCENE6100_ROCKY_AREA = "\x8F\xE0\xEF\xAC\xAE \xAF\xAE \xAA\xE3\xE0\xE1\xE3 \xA4\xAE\xAB\xA6\xA5\xAD \xA1\xEB\xE2\xEC \xE1\xAA\xA0\xAB\xA8\xE1\xE2\xEB\xA9 \xE3\xE7\xA0\xE1\xE2\xAE\xAA. \x82\xA8\xA4\xA8\xE8\xEC \xA5\xA3\xAE?"; // "Прямо по курсу должен быть скалистый участок. Видишь его?"
+char const *const RUS_SCENE6100_REPLY = "\x84\xA0. \x8E\xE1\xE2\xA0\xAB\xAE\xE1\xEC \xAE\xA1\xEA\xA5\xE5\xA0\xE2\xEC \xAB\xE3\xE7\xA8 \xAF\xAE\xA4\xE1\xAE\xAB\xAD\xA5\xE7\xAD\xA8\xAA\xAE\xA2."; // "Да. Осталось объехать лучи подсолнечников."
+char const *const RUS_SCENE6100_TAKE_CONTROLS = "\x8F\xA5\xE0\xA5\xE5\xA2\xA0\xE2\xA8\x2D\xAA\xA0 \xE3\xAF\xE0\xA0\xA2\xAB\xA5\xAD\xA8\xA5, \x88\xE9\xE3\xE9\xA8\xA9. \x93 \xAC\xA5\xAD\xEF \xE0\xE3\xAA\xA8 \xA2\xE1\xAF\xAE\xE2\xA5\xAB\xA8."; // "Перехвати-ка управление, Ищущий. У меня руки вспотели."
+char const *const RUS_SCENE6100_SURPRISE = "\x92\xEB \xE3\xA4\xA8\xA2\xAB\xEF\xA5\xE8\xEC \xAC\xA5\xAD\xEF. \x8A\xE3\xA8\xAD. \x8C\xAD\xA5 \xAA\xA0\xA7\xA0\xAB\xAE\xE1\xEC, \xE2\xEB \xAD\xA5 \xE2\xA0\xAA\xAE\xA9 \xE0\xA0\xA7\xAC\xA0\xA7\xAD\xEF."; // "Ты удивляешь меня, Куин. Мне казалось, ты не такой размазня."
+char const *const RUS_SCENE6100_SWEAT = "\x8B\xEE\xA4\xA8 \xAF\xAE\xE2\xA5\xEE\xE2, \xAA\xA7\xA8\xAD\xEB \xAF\xAE\xA4\xF1\xE0\xA3\xA8\xA2\xA0\xEE\xE2 \xE5\xA2\xAE\xE1\xE2\xAE\xAC. \x82 \xE7\xF1\xAC \xE0\xA0\xA7\xAD\xA8\xE6\xA0?"; // "Люди потеют, кзины подёргивают хвостом. В чём разница?"
+char const *const RUS_SCENE6100_VERY_WELL = "\x8B\xA0\xA4\xAD\xAE. \x9F \xA7\xA0\xA1\xA5\xE0\xE3 \xE1\xE2\xA0\xA7\xA8\xE1\x2D\xAA\xAE\xAD\xE2\xA5\xA9\xAD\xA5\xE0 \xA8 \xA2\xA5\xE0\xAD\xE3 \xA7\xAE\xAD\xA4 \xAD\xA0 \xA1\xA0\xA7\xE3. \x86\xA4\xA8 \xA2 \xA3\xA0\xE0\xA0\xA6\xAD\xAE\xAC \xAE\xE2\xE1\xA5\xAA\xA5."; // "Ладно. Я заберу стазис-контейнер и верну зонд на базу. Жди в гаражном отсеке."
+
 } // End of namespace Ringworld
 
 namespace BlueForce {
diff --git a/engines/tsage/staticres.h b/engines/tsage/staticres.h
index 076a2cfa262..5a4b2dbd521 100644
--- a/engines/tsage/staticres.h
+++ b/engines/tsage/staticres.h
@@ -76,6 +76,27 @@ extern char const *const ESP_SOUND_BTN_STRING;
 extern char const *const ESP_LOOK_BTN_STRING;
 extern char const *const ESP_PICK_BTN_STRING;
 
+// Russian version
+extern char const *const RUS_LOOK_SCENE_HOTSPOT;
+extern char const *const RUS_USE_SCENE_HOTSPOT;
+extern char const *const RUS_TALK_SCENE_HOTSPOT;
+extern char const *const RUS_SPECIAL_SCENE_HOTSPOT;
+extern char const *const RUS_DEFAULT_SCENE_HOTSPOT;
+extern char const *const RUS_SAVE_ERROR_MSG;
+extern char const *const RUS_SAVING_NOT_ALLOWED_MSG;
+extern char const *const RUS_RESTORING_NOT_ALLOWED_MSG;
+extern char const *const RUS_INV_EMPTY_MSG;
+
+// Dialogs
+extern char const *const RUS_OK_BTN_STRING;
+extern char const *const RUS_CONTINUE_BTN_STRING;
+extern char const *const RUS_CANCEL_BTN_STRING;
+extern char const *const RUS_RESTORE_BTN_STRING;
+extern char const *const RUS_SOUND_BTN_STRING;
+extern char const *const RUS_LOOK_BTN_STRING;
+extern char const *const RUS_PICK_BTN_STRING;
+
+
 namespace Ringworld {
 
 // Dialog resources
@@ -141,6 +162,36 @@ extern char const *const ESP_SCENE6100_SURPRISE;
 extern char const *const ESP_SCENE6100_SWEAT;
 extern char const *const ESP_SCENE6100_VERY_WELL;
 
+// Russian version
+extern char const *const RUS_QUIT_CONFIRM_MSG;
+extern char const *const RUS_RESTART_MSG;
+extern char const *const RUS_GAME_PAUSED_MSG;
+extern char const *const RUS_QUIT_BTN_STRING;
+extern char const *const RUS_RESTART_BTN_STRING;
+extern char const *const RUS_SAVE_BTN_STRING;
+extern char const *const RUS_RESUME_BTN_STRING;
+
+// Dialog resources
+extern char const *const RUS_HELP_MSG;
+extern char const *const RUS_WATCH_INTRO_MSG;
+extern char const *const RUS_START_PLAY_BTN_STRING;
+extern char const *const RUS_INTRODUCTION_BTN_STRING;
+extern char const *const RUS_OPTIONS_MSG;
+
+// Scene specific resources
+extern char const *const RUS_EXIT_MSG;
+extern char const *const RUS_SCENE6100_CAREFUL;
+extern char const *const RUS_SCENE6100_TOUGHER;
+extern char const *const RUS_SCENE6100_ONE_MORE_HIT;
+extern char const *const RUS_SCENE6100_DOING_BEST;
+extern char const *const RUS_SCENE6100_REPAIR;
+extern char const *const RUS_SCENE6100_ROCKY_AREA;
+extern char const *const RUS_SCENE6100_REPLY;
+extern char const *const RUS_SCENE6100_TAKE_CONTROLS;
+extern char const *const RUS_SCENE6100_SURPRISE;
+extern char const *const RUS_SCENE6100_SWEAT;
+extern char const *const RUS_SCENE6100_VERY_WELL;
+
 } // End of namespace Ringworld
 
 namespace BlueForce {




More information about the Scummvm-git-logs mailing list