Add DLOG support, update MSBT for MP4

This commit is contained in:
Bearborg
2026-03-28 15:03:02 -04:00
parent 4ac881f8a0
commit 668838eaa8
3 changed files with 87 additions and 4 deletions
+53
View File
@@ -0,0 +1,53 @@
#ifndef _DIALOGUE
#define _DIALOGUE
#include "Common.bt"
typedef enum <uint> {
Armstrong = 0x3B6D5087,
Duke = 0xF3FA69F7,
MacKenzie = 0x3749E413,
Tokabi = 0xF1CAB965,
VUE_995 = 0x5AFA1EB5,
Samus = 0x525C2625,
Sylux = 0x97CE32B7,
None = 0x1344B4AA
} DialogueActor;
typedef struct Line {
CStringFixed label;
ubyte unk[4];
DialogueActor speakerId<format=hex>;
DialogueActor targetId<format=hex>;
ubyte unk1[4];
GUID caud;
byte unk2[10];
};
typedef struct Scene {
uint maybe_id <format=hex>;
uint unk1;
uint unk2[2];
ubyte unk3[4];
uint unk4[2];
ubyte unk5[6];
uint unk6;
ubyte hasLDCH;
if (hasLDCH) {
ubyte magic[4];
uint ldchSize;
uint ldchUnks[4];
ubyte unk0[ldchSize];
}
uint lineCount;
Line lines[lineCount] <optimize=false>;
};
typedef struct Dialogue {
uint count;
if (count) {
Scene scenes[count] <optimize=false>;
}
};
#endif// _DIALOGUE
+29 -3
View File
@@ -125,6 +125,7 @@ struct TextsSection {
struct Language (string expectedLanguage) {
ChunkDescriptor languageChunkHeader;
Assert(languageChunkHeader.id == expectedLanguage);
// Each section here is heavily referenced from https://zeldamods.org/wiki/Msbt
struct MSBTContents {
MSBTHeader header;
@@ -138,8 +139,15 @@ struct Language (string expectedLanguage) {
} contents;
};
struct MessageStudioBinaryText
{
struct TableName {
ChunkDescriptor tableNameChunkHeader;
Assert(tableNameChunkHeader.id == "TBNM");
CStringFixed name;
};
struct MessageStudioBinaryText(uint32 readerVersion, uint32 writerVersion)
{
Assert(readerVersion == writerVersion);
if (isDKCTF == 1)
{
Language us_english("USEN");
@@ -151,7 +159,7 @@ struct MessageStudioBinaryText
Language eu_german("EUGE");
Language eu_italian("EUIT");
Language jp_japanese("JPJP");
} else {
} else if (readerVersion == 10) {
Language us_english("USEN");
Language eu_english("EUEN");
Language eu_french("EUFR");
@@ -165,6 +173,24 @@ struct MessageStudioBinaryText
Language ch_traditionalchinese("CHTC");
Language ch_simplifiedchinese("CHSC");
Language us_spanish("USSP");
} else if (readerVersion == 16) {
Language us_english("USEN");
Language eu_english("EUEN");
Language us_portuguese("USPO");
Language eu_french("EUFR");
Language us_french("USFR");
Language eu_spanish("EUSP");
Language us_spanish("USSP");
Language eu_german("EUGE");
Language eu_italian("EUIT");
Language eu_dutch("EUDU");
Language jp_japanese("JPJP");
Language ch_simplifiedchinese("CHSC");
Language ko_korean("KOKO");
Language ch_traditionalchinese("CHTC");
TableName tableName;
} else {
Assert(false, "Unsupported MSBT version!");
}
};
+5 -1
View File
@@ -40,6 +40,7 @@ if (!exists(isDKCTF)) {
#include "CFont.bt"
#include "DependencyGroup.bt"
#include "NModConFormat.bt"
#include "Dialogue.bt"
// Custom footer
#include "Footer.bt"
@@ -107,7 +108,7 @@ typedef struct {
ModelFile model(form.size, form.readerVersion, form.writerVersion);
break;
case "MSBT":
// MessageStudioBinaryText text;
MessageStudioBinaryText text(form.readerVersion, form.writerVersion);
break;
case "PACK":
CPakFile pak;
@@ -148,6 +149,9 @@ typedef struct {
case "MCON":
CModConData data(form.size);
break;
case "DLOG":
Dialogue data;
break;
}
FSeek(start + form.size);
} File<open = true, bgcolor = cSilver>;