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

criezy noreply at scummvm.org
Sat Feb 21 22:03:59 UTC 2026


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

Summary:
32e89153b3 TEENAGENT: Use custom language IDs for teenagent.dat
afe922798c NEWS: Mention teenagent language fix


Commit: 32e89153b3750b6e599361452240d93846f34b88
    https://github.com/scummvm/scummvm/commit/32e89153b3750b6e599361452240d93846f34b88
Author: Thierry Crozat (criezy at scummvm.org)
Date: 2026-02-21T22:03:55Z

Commit Message:
TEENAGENT: Use custom language IDs for teenagent.dat

We were using the Common::Language value to identify language blocks
in the teenagent.dat file. But that meant that modifying the enum
would cause the dat file to become obsolete and the engine to fail
to find some language block. This recently happened with commit
13b659b that added Canadian French to Common::Language.

This commit introduces custom language IDs that match the
Common::Language values at the time teenagent.dat was last
generated, This means we do not need to generate it again with
those changes.

This fixes bug #16568.

Changed paths:
    devtools/create_teenagent/create_teenagent.cpp
    devtools/create_teenagent/create_teenagent.h
    engines/teenagent/resources.cpp
    engines/teenagent/resources.h


diff --git a/devtools/create_teenagent/create_teenagent.cpp b/devtools/create_teenagent/create_teenagent.cpp
index e71a8fedb50..d245942a676 100644
--- a/devtools/create_teenagent/create_teenagent.cpp
+++ b/devtools/create_teenagent/create_teenagent.cpp
@@ -42,7 +42,7 @@ void writeStringsBlock(FILE *fd, const char **stringArr, uint size) {
 	}
 }
 
-void writeCombinations(FILE *fd, Common::Language language) {
+void writeCombinations(FILE *fd, Language language) {
 	const char **combineMessages = englishCombineMessages;
 	if (language == CS_CZE)
 		combineMessages = czechCombineMessages;
@@ -64,7 +64,7 @@ void writeCombinations(FILE *fd, Common::Language language) {
 	}
 }
 
-void writeDialogStacks(FILE *fd, Common::Language language) {
+void writeDialogStacks(FILE *fd, Language language) {
 	const char ***dialogs = englishDialogs;
 	if (language == CS_CZE)
 		dialogs = czechDialogs;
@@ -108,7 +108,7 @@ void writeDialogStacks(FILE *fd, Common::Language language) {
 	}
 }
 
-void writeDialogs(FILE *fd, Common::Language language) {
+void writeDialogs(FILE *fd, Language language) {
 	const char ***dialogs = englishDialogs;
 	if (language == CS_CZE)
 		dialogs = czechDialogs;
@@ -153,7 +153,7 @@ void writeDialogs(FILE *fd, Common::Language language) {
 	}
 }
 
-void writeItems(FILE *fd, Common::Language language) {
+void writeItems(FILE *fd, Language language) {
 	const char ***items = englishItems;
 	if (language == CS_CZE)
 		items = czechItems;
@@ -195,7 +195,7 @@ void writeItems(FILE *fd, Common::Language language) {
 	}
 }
 
-void writeSceneObjects(FILE *fd, Common::Language language) {
+void writeSceneObjects(FILE *fd, Language language) {
 	Common::Array<Common::Array<ObjectNameDesc>> *objNamesDescs = &englishSceneObjectNamesDescs;
 	SettableObjectName *settableSceneObjects = englishSettableObjectNames;
 
@@ -311,7 +311,7 @@ void writeSceneObjects(FILE *fd, Common::Language language) {
 	fseek(fd, pos, SEEK_SET);
 }
 
-uint32 writeResource(FILE *fd, ResourceType resType, Common::Language language) {
+uint32 writeResource(FILE *fd, ResourceType resType, Language language) {
 	uint prevFilePos = ftell(fd);
 
 	switch (resType) {
@@ -401,7 +401,7 @@ int main(int argc, char *argv[]) {
 
 		writeUint32LE(fout, 0);
 	}
-	writeByte(fout, (byte)Common::Language::UNK_LANG);
+	writeByte(fout, (byte)0xff);
 
 	for (uint lang = 0; lang < NUM_LANGS; lang++) {
 		// Write offset to data
diff --git a/devtools/create_teenagent/create_teenagent.h b/devtools/create_teenagent/create_teenagent.h
index 3118a4af413..be1c41d5ea8 100644
--- a/devtools/create_teenagent/create_teenagent.h
+++ b/devtools/create_teenagent/create_teenagent.h
@@ -22,7 +22,6 @@
 #ifndef CREATE_TEENAGENT_H
 #define CREATE_TEENAGENT_H
 
-#include "common/language.h"
 #include "util.h"
 
 #define TEENAGENT_DAT_VERSION 6
@@ -46,7 +45,17 @@ struct ResourceInfo {
 #define NUM_RESOURCES 7
 #define NUM_LANGS 4
 
-const Common::Language supportedLanguages[NUM_LANGS] = {
+// If you are adding a new language here, make sure to sync with teenagent/resources.h
+// enum in DataLanguage around line 1165
+
+enum Language : byte {
+	CS_CZE = 3,
+	EN_ANY = 7,
+	PL_POL = 27,
+	RU_RUS = 30,
+};
+
+const Language supportedLanguages[NUM_LANGS] = {
 	CS_CZE,
 	EN_ANY,
 	PL_POL,
diff --git a/engines/teenagent/resources.cpp b/engines/teenagent/resources.cpp
index c3341a00ed3..76faea39594 100644
--- a/engines/teenagent/resources.cpp
+++ b/engines/teenagent/resources.cpp
@@ -347,6 +347,14 @@ bool Resources::loadArchives(const ADGameDescription *gd) {
 
 	// Locate the correct language block
 	bool found = false;
+	byte datLang = 0;
+	switch (gd->language) {
+	case Common::CS_CZE: datLang = DataLanguage::CS_CZE; break;
+	case Common::EN_ANY: datLang = DataLanguage::EN_ANY; break;
+	case Common::PL_POL: datLang = DataLanguage::PL_POL; break;
+	case Common::RU_RUS: datLang = DataLanguage::RU_RUS; break;
+	default: break;
+	}
 
 	while (!found) {
 		dat->read(tempBuffer, 5);
@@ -354,7 +362,7 @@ bool Resources::loadArchives(const ADGameDescription *gd) {
 			error("Could not locate correct language block");
 		}
 
-		if (gd->language == tempBuffer[0]) {
+		if (datLang == tempBuffer[0]) {
 			found = true;
 			uint32 dataOffset = READ_LE_UINT32(&tempBuffer[1]);
 			dat->seek(dataOffset);
diff --git a/engines/teenagent/resources.h b/engines/teenagent/resources.h
index ceb04fa5cec..e6431fca18a 100644
--- a/engines/teenagent/resources.h
+++ b/engines/teenagent/resources.h
@@ -1162,6 +1162,17 @@ const uint16 dsAddr_finalCredits7 = 0xe488; // "programming..."
 
 const byte kNumDialogStacks = 26;
 
+// Values in the enum below should match those defined in the Language enum
+// in create_teenagent.h
+namespace DataLanguage {
+enum : byte {
+	CS_CZE = 3,
+	EN_ANY = 7,
+	PL_POL = 27,
+	RU_RUS = 30,
+};
+}
+
 enum MessageType{
 	kRejectMsg0 = 0,
 	kRejectMsg1,


Commit: afe922798c904999030f83f1ec154226a9a7aa38
    https://github.com/scummvm/scummvm/commit/afe922798c904999030f83f1ec154226a9a7aa38
Author: Thierry Crozat (criezy at scummvm.org)
Date: 2026-02-21T22:03:55Z

Commit Message:
NEWS: Mention teenagent language fix

Changed paths:
    NEWS.md


diff --git a/NEWS.md b/NEWS.md
index 57dc69882d7..2b3cae8c957 100644
--- a/NEWS.md
+++ b/NEWS.md
@@ -40,6 +40,9 @@ For a more comprehensive changelog of the latest experimental code, see:
    - Added support for original playback file in Monkey Island 2 Non-Interactive
      DOS demo.
 
+ TEENGENT:
+   - Fixed 'could not locate language block' error when starting the Polish and Russian versions.
+
  WAGE:
    - Implemented combat system.
    - Numerous visual fixes.




More information about the Scummvm-git-logs mailing list