diff --git a/.gitmodules b/.gitmodules
index 1cfb4e8..2ce17f3 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,7 +1,7 @@
[submodule "Js/Translations"]
path = Js/Translations
url = https://git.poweris.moe/yttt-xdu/xdutranslations.git
- branch = .
+ branch = master
[submodule "CustomData"]
path = CustomData
url = https://git.poweris.moe/yttt-xdu/customdata.git
diff --git a/CHANGELOG.md b/CHANGELOG.md
index f696757..d5b8181 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -43,4 +43,8 @@ Fix MoveCamera macro
## V1.4.0 (2019-09-29)
-Updated Pixi.js to v5
\ No newline at end of file
+Updated Pixi.js to v5
+
+## V1.5.0 (2020-07-31)
+
+XDU Global support
diff --git a/Css/main.css b/Css/main.css
index 2b293b9..779762e 100644
--- a/Css/main.css
+++ b/Css/main.css
@@ -84,6 +84,8 @@ body { margin: 0; height: 100%; }
#text-container.rus { font-family: 'PTSans'; }
+#text-container.cze { font-family: 'PTSans'; }
+
#text-container #fullscreen-button { position: absolute; top: 0.5rem; left: 0.5rem; font-size: 30px; line-height: 30px; opacity: 0.35; z-index: 11; }
#text-container #title { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; font-size: 20px; transition: opacity 0.3s; cursor: default; user-select: none; }
diff --git a/Js/Main.js b/Js/Main.js
index ccf8202..7ba61db 100644
--- a/Js/Main.js
+++ b/Js/Main.js
@@ -10,8 +10,8 @@ const shaders = new Shaders();
const textFunc = new TextFunctions();
let audio = undefined; //Cant create a audio context without user input.
const player = new Player(pixiApp, utage, textFunc, audio, shaders);
-const languages = ["eng", "jpn", "rus", "enm", "kor", "zho"];
-const version = "YameteTomete XDUPlayer V1.4.0";
+const languages = ["eng", "jpn", "rus", "cze", "enm", "kor", "zho"];
+const version = "YameteTomete XDUPlayer V1.5.0";
let bodyLoaded = false;
let utageLoaded = false;
let languagesLoaded = false;
@@ -142,7 +142,7 @@ function buildQuestSelectList() {
let tl_key = utage.questTranslations[cust][q.QuestMstId];
if (!tl_key) {
console.log("Failed to build quest list: missing translations");
- return;
+ continue;
}
if (!tl_key.Enabled && !utage.quests[cust][q.QuestMstId].Scenes.some((s) => { return utage.sceneTranslations[cust][s].Enabled === true })) {
continue;
@@ -191,7 +191,7 @@ function buildSceneSelectList() {
let tl_key = utage.sceneTranslations[cust][questSceneMstId];
if (!tl_key) {
console.log("Failed to build scene list: missing translations");
- return;
+ continue;
}
if (!tl_key.Enabled) {
continue;
@@ -285,6 +285,10 @@ function sceneDropDownChanged(event) {
let name = scene.Name;
let summary = scene.SummaryText;
+ let image = questSceneMstId;
+ if ("Image" in scene) {
+ image = scene.Image;
+ }
let credits = "";
let tl_key = utage.sceneTranslations[cust][questSceneMstId];
@@ -307,8 +311,8 @@ function sceneDropDownChanged(event) {
chapterSelect += ``
}
- let detailSrc = `${utage.rootDirectory}${(scene.IsCustom ? "CustomData" : "XDUData")}/Asset/Image/Quest/Snap/Detail/${questSceneMstId}.png`;
- let iconSrc = `${utage.rootDirectory}${(scene.IsCustom ? "CustomData" : "XDUData")}/Asset/Image/Quest/Snap/Icon/${questSceneMstId}.png`;
+ let detailSrc = `${utage.rootDirectory}${(scene.IsCustom ? "CustomData" : "XDUData")}/Asset/Image/Quest/Snap/Detail/${image}.png`;
+ let iconSrc = `${utage.rootDirectory}${(scene.IsCustom ? "CustomData" : "XDUData")}/Asset/Image/Quest/Snap/Icon/${image}.png`;
chapterSelect += '';
cont.innerHTML = `
diff --git a/Js/Player.js b/Js/Player.js
index 99ab45e..5f9d29b 100644
--- a/Js/Player.js
+++ b/Js/Player.js
@@ -960,7 +960,12 @@ class Player {
let text = cur.English ? (this.utage.translations ? (this.utage.translations[cur.English] || cur.Text) : cur.Text) : cur.Text;
text = commonFunctions.convertUtageTextTags(text);
if(cur.Arg2 && cur.Arg2.toLowerCase() === "") {
- this.text.characterName(true, this.utage.charTranslations[cur.Arg1] || cur.Arg1);
+ let nameFullWidth = cur.Arg1.replace(/[A-Za-z0-9]/g, function(s) {return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);});
+ let nameHalfWidth = cur.Arg1.replace(/[A-Za-z0-9]/g, function(s) {return String.fromCharCode(s.charCodeAt(0) - 0xFEE0)});
+ this.text.characterName(true, this.utage.charTranslations[cur.Arg1]
+ || this.utage.charTranslations[nameFullWidth]
+ || this.utage.charTranslations[nameHalfWidth]
+ || cur.Arg1);
this.text.dialogText(true, commonFunctions.convertUtageTextTags(text));
} else {
let found = false;
@@ -975,7 +980,12 @@ class Player {
if(cur.Character) {
nameToUse = cur.Arg1;
}
- this.text.characterName(true, this.utage.charTranslations[nameToUse] || nameToUse);
+ let nameFullWidth = nameToUse.replace(/[A-Za-z0-9]/g, function(s) {return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);});
+ let nameHalfWidth = nameToUse.replace(/[A-Za-z0-9]/g, function(s) {return String.fromCharCode(s.charCodeAt(0) - 0xFEE0)});
+ this.text.characterName(true, this.utage.charTranslations[nameToUse]
+ || this.utage.charTranslations[nameFullWidth]
+ || this.utage.charTranslations[nameHalfWidth]
+ || nameToUse);
this.text.dialogText(true, text);
//restoreTint is set from a colorTo command.
//We want to maintain the tint change from colorTo during speaking still.
@@ -1013,7 +1023,12 @@ class Player {
}
//If we didnt find the character just dump the text anyways with Arg1 as the name
if(!found) {
- this.text.characterName(true, this.utage.charTranslations[cur.Arg1] || cur.Arg1);
+ let nameFullWidth = cur.Arg1.replace(/[A-Za-z0-9]/g, function(s) {return String.fromCharCode(s.charCodeAt(0) + 0xFEE0);});
+ let nameHalfWidth = cur.Arg1.replace(/[A-Za-z0-9]/g, function(s) {return String.fromCharCode(s.charCodeAt(0) - 0xFEE0)});
+ this.text.characterName(true, this.utage.charTranslations[cur.Arg1]
+ || this.utage.charTranslations[nameFullWidth]
+ || this.utage.charTranslations[nameHalfWidth]
+ || cur.Arg1);
this.text.dialogText(true, text);
}
}
diff --git a/Js/Translations b/Js/Translations
index 178ec9b..ac0bfbd 160000
--- a/Js/Translations
+++ b/Js/Translations
@@ -1 +1 @@
-Subproject commit 178ec9be36f504418d6aae0bb099d5006bd4186a
+Subproject commit ac0bfbd699431e9befdd843379e7c91ad1014cec
diff --git a/Js/UtageParse.js b/Js/UtageParse.js
index 3efa61e..a33cde2 100644
--- a/Js/UtageParse.js
+++ b/Js/UtageParse.js
@@ -141,7 +141,12 @@ class UtageInfo {
for (const k of Object.keys(this.questTranslationsInner[this.currentTranslation][c])) {
if (this.questTranslationsInner[this.currentTranslation][c][k].Enabled) {
for (const s of this.quests[c][k].Scenes) {
- this.sceneTranslationsInner[this.currentTranslation][c][s].Enabled = true;
+ // only propagate if exists in translation file (THANKS GLOBAL) and translated name is supplied
+ if (c in this.sceneTranslationsInner[this.currentTranslation]
+ && s in this.sceneTranslationsInner[this.currentTranslation][c]
+ && this.sceneTranslationsInner[this.currentTranslation][c][s].Name != "") {
+ this.sceneTranslationsInner[this.currentTranslation][c][s].Enabled = true;
+ }
}
}
}