diff --git a/Css/main.css b/Css/main.css
index e61d316..d4471e5 100644
--- a/Css/main.css
+++ b/Css/main.css
@@ -52,6 +52,8 @@
to { transform: translate(0, -5px); }
}
+body { margin: 0; }
+
.centered { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; }
.hidden { opacity: 0; }
@@ -98,6 +100,8 @@
#dialog-scroll img { height: 35px; }
+#title-container { margin-bottom: 2px; }
+
#other-controls-container { display: flex; width: 550px; justify-content: center; }
#select-mission { min-width: 0; }
@@ -122,9 +126,11 @@
#mission-modal span { max-width: 100%; word-break: break-word; max-height: 120px; overflow: auto;}
-#mission-modal .mission-title { text-align: center; }
+#mission-modal .mission-title { font-weight: bold; text-align: center; }
-#mission-modal #mission-ids { margin-top: auto; width: 100%; display: flex; justify-content: space-around; }
+#mission-modal #mission-ids { margin-top: auto; width: 100%; display: flex; flex-direction: column; align-items: center; }
+
+#mission-modal #mission-ids div { display: flex; align-items: center; }
#modal-buttons { bottom: 0; margin-top: 10px; width: 100%; display: flex; justify-content: space-between; }
diff --git a/Images/hide_button.png b/Images/hide_button.png
index e308170..66132ad 100644
Binary files a/Images/hide_button.png and b/Images/hide_button.png differ
diff --git a/Images/skip_button.png b/Images/skip_button.png
new file mode 100644
index 0000000..8f42d13
Binary files /dev/null and b/Images/skip_button.png differ
diff --git a/Js/Common.js b/Js/Common.js
index 04e61c8..0aa7842 100644
--- a/Js/Common.js
+++ b/Js/Common.js
@@ -45,6 +45,37 @@ class commonFunctions {
});
}
+ static readQueryParameters() {
+ let params = {};
+ let indexOfStart = window.location.href.indexOf("?");
+ let toCheck = window.location.href.slice(indexOfStart + 1);
+ let name = "";
+ let value = "";
+ let nameStep = true;
+ for(let i = 0; i < toCheck.length; ++i) {
+ if(toCheck[i] === "=") {
+ name = name.toLowerCase();
+ params[decodeURIComponent(name)] = "";
+ nameStep = false
+ continue;
+ }
+ if(toCheck[i] === "&") {
+ params[name] = decodeURIComponent(value);
+ name = "";
+ value = "";
+ nameStep = true;
+ continue;
+ }
+ if(nameStep) {
+ name += toCheck[i];
+ } else {
+ value += toCheck[i];
+ }
+ }
+ params[name] = decodeURIComponent(value);
+ return params;
+ }
+
static readLine(line, headers) {
if(line.startsWith('//')) {
return {comment: line};
diff --git a/Js/Main.js b/Js/Main.js
index 649123d..e26a736 100644
--- a/Js/Main.js
+++ b/Js/Main.js
@@ -13,8 +13,13 @@ const player = new Player(pixiApp, utage, textFunc, audio, shaders);
const languages = ["eng", "jpn"];
let bodyLoaded = false;
let utageLoaded = false;
+let languagesLoaded = false;
let selectedLang = "eng";
let currentMission = undefined;
+let currentMissionMst = 0;
+let currentMissionIndex = 0;
+let currentMissionList = [];
+let urlParams = {};
let screenw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
let screenh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
let screenSizeTimeout = undefined;
@@ -44,14 +49,14 @@ function onBodyLoaded() {
document.getElementById('loading-font').style.cssText = "display: none;";
loadLocalStorage();
}
- if(utageLoaded) {
+ if(utageLoaded && languagesLoaded) {
document.getElementById('loading-utage').style.cssText = "display: none;";
}
- if(bodyLoaded && utageLoaded) {
+ if(bodyLoaded && utageLoaded && languagesLoaded) {
document.getElementById('loading-container').style.cssText = "opacity: 0;";
onAllLoaded();
} else {
- setTimeout(checkIsLoaded, 300);
+ setTimeout(checkIsLoaded, 200);
}
})();
@@ -65,6 +70,7 @@ function onAllLoaded(success) {
document.getElementById('parent-container').style.cssText = "opacity: 1;";
onWindowResize();
window.addEventListener("resize", onWindowResize);
+ checkQueryParameters();
}, 0);
}
@@ -91,7 +97,13 @@ function loadLocalStorage() {
if(languages.includes(lang)) {
selectedLang = lang;
}
- utage.setTranslationLanguage(selectedLang, '');
+ utage.setTranslationLanguage(selectedLang, '')
+ .then((success) => {
+ languagesLoaded = true;
+ }, (failure) => {
+ languagesLoaded = true;
+ console.log(failure);
+ });
} catch(error) {
console.log(error);
}
@@ -107,11 +119,16 @@ function buildMissionSelectList() {
opt.innerText = 'Select Mission';
} else {
let m = utage.missionsList[i];
- if(!m.includes('MA3.5-')) {
+ //Only allowing 3.5 right now
+ if(!(m.MstId >= 104001 && m.MstId <= 104008)) {
continue;
}
- opt.setAttribute('value', m);
- opt.innerText = m.replace('|', ' - ');
+ opt.setAttribute('value', m.MstId);
+ let name = m.Name;
+ if(utage.missionTranslations[m.MstId]) {
+ name = utage.missionTranslations[m.MstId].Name || name;
+ }
+ opt.innerText = name;
}
selectBox.appendChild(opt);
}
@@ -129,27 +146,46 @@ function buildLanguageList() {
selectBox.value = selectedLang;
}
+function checkQueryParameters() {
+ urlParams = commonFunctions.readQueryParameters();
+ if(urlParams['mstid'] && urlParams['id'] && utage.groupedMissions[urlParams['mstid']] && utage.groupedMissions[urlParams['mstid']].Missions[urlParams['id']]) {
+ missionChanged(urlParams['mstid'], urlParams['id']);
+ }
+}
+
function missionDropDownChanged(event) {
if(!event || !event.currentTarget || !event.currentTarget.value || event.currentTarget.value === '{Select}') { return; }
let cont = document.getElementById("modal-container");
- let misId = event.currentTarget.value.split('|')[0];
- let mis = utage.availableMissions[misId];
+ let misId = event.currentTarget.value;
+ let mis = utage.groupedMissions[misId];
if(!mis) { console.log(`Mission ${misId} not found`); return; }
- cont.innerHTML = '' +
- '
' +
- `
Name: ${mis.Name || 'none'}` +
- `

` +
- `

` +
- `
Summary: ${mis.SummaryText || 'none'}` +
- '
' +
- `MstId: ${mis.MstId}` +
- `Id: ${mis.Id}` +
- '
' +
- '
' +
- '' +
- `` +
- '
' +
- '
';
+ let name = mis.Name;
+ let summary = mis.SummaryText;
+ if(utage.missionTranslations[mis.MstId]) {
+ name = utage.missionTranslations[mis.MstId].Name || name;
+ summary = utage.missionTranslations[mis.MstId].SummaryText || summary;
+ }
+ let chapterSelect = 'Chapter Select:
';
+ cont.innerHTML = `
+
+
${name || 'none'}
+

+

+
Summary: ${summary || 'none'}
+
+ ${chapterSelect}
+
+
+
+ MstId: ${mis.MstId}
+
+
+
`;
document.getElementById("click-catcher").style.cssText = 'display: flex;';
cont.style.cssText = 'display: flex;';
}
@@ -166,7 +202,15 @@ function closeMissionModal(event, wasStarted) {
cont.innerHTML = '';
}
-function missionChanged(value) {
+function missionChanged(mstId, value) {
+ let mst = utage.groupedMissions[mstId];
+ let name = mst.Name;
+ if(utage.missionTranslations[mstId]) {
+ name = utage.missionTranslations[mstId].Name || name;
+ }
+ if(!value) {
+ value = document.getElementById("ChapterSelect").value;
+ }
if(!audio) {
audio = new audioController(utage);
audio.changeVolume(volume);
@@ -175,27 +219,33 @@ function missionChanged(value) {
}
player.resetAll()
.then((success) => {
- let newMission = utage.availableMissions[value];
+ let newMission = mst.Missions[value];
+ checkMissionList(mst.Missions, value);
currentMission = newMission;
+ currentMissionMst = mstId;
let promises = [
utage.parseMissionFile(`${utage.rootDirectory}XDUData/${newMission.Path.replace('Asset/', '').replace('.utage', '').replace('.tsv', '_t.tsv')}`),
utage.loadMissionTranslation(`${utage.rootDirectory}XDUData/${newMission.Path.replace('Asset/', '').replace('.utage', '').replace('.tsv', `_translations_${selectedLang}.json`)}`)
];
closeMissionModal(undefined, true);
-
Promise.all(promises)
.then((success) => {
- let res = player.playFile()
+ document.getElementById("playing-title").innerText = `${name} (${value})`;
+ player.playFile()
.then((success) => {
- player.resetAll();
- currentMission = undefined;
+ if(currentMissionIndex !== currentMissionList.length - 1) {
+ missionChanged(currentMissionMst, mst.Missions[currentMissionList[currentMissionIndex+1]].Id)
+ } else {
+ player.resetAll();
+ resetMissions();
+ }
}, (failure) => {
player.resetAll();
- currentMission = undefined;
+ resetMissions();
console.log(failure);
});
}, (failure) => {
- currentMission = undefined;
+ resetMissions();
console.log(failure);
});
}, (failure) => {
@@ -213,6 +263,33 @@ function languageChanged(event) {
utage.setTranslationLanguage(selectedLang, missionPath);
}
+function checkMissionList(missions, currentvalue) {
+ currentMissionList = [];
+ let i = 0;
+ for(var m of Object.keys(missions)) {
+ currentMissionList.push(m);
+ if(m === currentvalue) {
+ currentMissionIndex = i;
+ }
+ ++i;
+ }
+ if(currentMissionIndex + 1 === currentMissionList.length) {
+ document.getElementById("skip-button").style.cssText = "display: none;";
+ } else {
+ document.getElementById("skip-button").style.cssText = "display: inline-block;";
+ }
+}
+
+function resetMissions() {
+ currentMissionIndex = 0;
+ currentMissionList = [];
+ currentMission = undefined;
+ currentMissionMst = 0;
+ document.getElementById("skip-button").style.cssText = "display: inline-block;";
+ document.getElementById("playing-title").innerText = 'None';
+ document.getElementById('select-mission').value = '{Select}';
+}
+
function onMainClick(event) {
player.onMainClick(event);
}
@@ -221,6 +298,16 @@ function hideUiClicked(event) {
player.hideUiClicked(event);
}
+function skipClicked(event) {
+ if(player.uiHidden) {
+ player.hideUiClicked(event);
+ } else if(player.runEvent && currentMissionIndex !== currentMissionList.length - 1) {
+ event.preventDefault();
+ event.stopPropagation();
+ missionChanged(currentMissionMst, utage.groupedMissions[currentMissionMst].Missions[currentMissionList[currentMissionIndex+1]].Id);
+ }
+}
+
function dialogScrollUp(event) {
event.preventDefault();
event.stopPropagation();
@@ -263,6 +350,7 @@ function onWindowResize(event) {
screenw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
screenh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
let topContainerHeight = document.getElementById('other-controls-container').offsetHeight + 6;
+ topContainerHeight += document.getElementById('title-container').offsetHeight;
let res = commonFunctions.getNewResolution(baseDimensions, screenw, screenh, topContainerHeight);
player.updateResolution(res);
document.getElementById('app-container').style.cssText = `width: ${res.width}px; height: ${res.height}px;`;
diff --git a/Js/Player.js b/Js/Player.js
index edf704c..88e90d4 100644
--- a/Js/Player.js
+++ b/Js/Player.js
@@ -426,6 +426,7 @@ class Player {
processCommand(delta) {
try {
let cur = this.currentCommand;
+ //No seriously this is a thing they did
if(cur.Arg2 === '<Off>') {
cur.Arg2 = '';
}
diff --git a/Js/Translations/XduMissionsNames_eng.json b/Js/Translations/XduMissionsNames_eng.json
new file mode 100644
index 0000000..f53c78e
--- /dev/null
+++ b/Js/Translations/XduMissionsNames_eng.json
@@ -0,0 +1,1462 @@
+{
+ "101001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101011": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101012": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101013": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101014": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101015": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101016": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101017": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101018": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101019": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101020": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101041": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "101042": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102011": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102012": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102013": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102014": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102015": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102016": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102017": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102018": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102019": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102020": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102041": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "102042": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103011": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103012": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103013": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103014": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103015": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103016": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103017": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103018": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103019": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103020": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103041": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "103042": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "104001": {
+ "Name": "Symphogear 3.5 - 1: Warm-Up",
+ "SummaryText": ""
+ },
+ "104002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "104003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "104004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "104005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "104006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "104007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "104008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201011": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201012": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201015": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201016": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201017": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201018": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201019": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201020": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201701": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201801": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201802": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201803": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201804": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201805": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201806": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202012": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202013": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202014": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202016": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202017": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202018": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202019": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202020": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202021": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202022": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202023": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202024": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202025": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202026": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202027": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202028": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202029": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202030": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202031": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202032": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202033": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202034": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202035": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202036": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202037": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202038": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202039": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202040": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202041": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202042": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202043": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202044": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202045": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202047": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202048": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202049": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202050": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202051": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202052": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202053": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202054": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202055": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202056": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202057": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202058": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202059": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202060": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202061": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202062": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202063": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202064": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202065": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202066": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "202067": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203011": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203012": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203013": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203014": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203015": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203016": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203017": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203018": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203019": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203020": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203021": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203022": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203023": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203024": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203025": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203026": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203027": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203028": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203029": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203030": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203031": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203033": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203034": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203035": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "203036": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304011": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304012": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304013": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304014": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "304015": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "307101": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "307102": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "307103": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "307104": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "308001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "308007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "308008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309011": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309012": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309013": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309014": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "309015": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "311001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "311005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313011": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313012": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313013": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313014": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "313015": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "317001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "317002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "317003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "319001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "319002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "319003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "321001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "321002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "321003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "321004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "321005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "321006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "321007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "321008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "321009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "321010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "322055": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "322056": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "322057": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "323055": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "323056": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "323057": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324011": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324012": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324013": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324014": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "324015": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325011": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325012": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325013": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325014": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "325015": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "326001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "326002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "326003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "327001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "327002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "327003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "328001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "328002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "328003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "328004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "328005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "328006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "328007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "328008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "328009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "328010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "330001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "330002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "330003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "331001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "331002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "331003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "332001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "332002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "332003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "332004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "332005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "332006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "332007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "332008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "332009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "332010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "332030": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "333001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "333002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "333003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335011": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335012": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335013": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335014": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "335015": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "336001": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "336002": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "336003": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "336004": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "336005": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "336006": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "336007": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "336008": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "336009": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "336010": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "336016": {
+ "Name": "",
+ "SummaryText": ""
+ }
+}
\ No newline at end of file
diff --git a/Js/Translations/XduMissionsNames_jpn.json b/Js/Translations/XduMissionsNames_jpn.json
new file mode 100644
index 0000000..fb58662
--- /dev/null
+++ b/Js/Translations/XduMissionsNames_jpn.json
@@ -0,0 +1,1462 @@
+{
+ "101001": {
+ "Name": "MA1-1:戦場の歌姫",
+ "SummaryText": ""
+ },
+ "101002": {
+ "Name": "MA1-2:覚醒の鼓動",
+ "SummaryText": ""
+ },
+ "101003": {
+ "Name": "MA1-3:雑音と不協和音と",
+ "SummaryText": ""
+ },
+ "101004": {
+ "Name": "MA1-4:夜にすれ違う・前編",
+ "SummaryText": ""
+ },
+ "101005": {
+ "Name": "MA1-5:夜にすれ違う・後編",
+ "SummaryText": ""
+ },
+ "101006": {
+ "Name": "MA1-6:落涙",
+ "SummaryText": ""
+ },
+ "101007": {
+ "Name": "MA1-7:なお昏き深淵の底から",
+ "SummaryText": ""
+ },
+ "101008": {
+ "Name": "MA1-8:デュランダル起動",
+ "SummaryText": ""
+ },
+ "101009": {
+ "Name": "MA1-9:兆しの行方は",
+ "SummaryText": ""
+ },
+ "101010": {
+ "Name": "MA1-10:撃ちてし止まぬ運命のもとに・前編",
+ "SummaryText": ""
+ },
+ "101011": {
+ "Name": "MA1-11:撃ちてし止まぬ運命のもとに・後編",
+ "SummaryText": ""
+ },
+ "101012": {
+ "Name": "MA1-12:陽だまりに翳りなく・前編",
+ "SummaryText": ""
+ },
+ "101013": {
+ "Name": "MA1-13:陽だまりに翳りなく・後編",
+ "SummaryText": ""
+ },
+ "101014": {
+ "Name": "MA1-14:防人の歌",
+ "SummaryText": ""
+ },
+ "101015": {
+ "Name": "MA1-15:繋いだ手だけが紡ぐもの・前編",
+ "SummaryText": ""
+ },
+ "101016": {
+ "Name": "MA1-16:繋いだ手だけが紡ぐもの・後編",
+ "SummaryText": ""
+ },
+ "101017": {
+ "Name": "MA1-17:月を穿つ",
+ "SummaryText": ""
+ },
+ "101018": {
+ "Name": "MA1-18:シンフォギア",
+ "SummaryText": ""
+ },
+ "101019": {
+ "Name": "MA1-19:エクスドライブ",
+ "SummaryText": ""
+ },
+ "101020": {
+ "Name": "MA1-20:流れ星、墜ちて燃えて尽きて、そして―",
+ "SummaryText": ""
+ },
+ "101041": {
+ "Name": "MA1-21:クリスの入学①",
+ "SummaryText": ""
+ },
+ "101042": {
+ "Name": "MA1-22:クリスの入学②",
+ "SummaryText": ""
+ },
+ "102001": {
+ "Name": "MA2-1:不穏な足音",
+ "SummaryText": ""
+ },
+ "102002": {
+ "Name": "MA2-2:ガングニールの少女",
+ "SummaryText": ""
+ },
+ "102003": {
+ "Name": "MA2-3:胸に力と偽りと",
+ "SummaryText": ""
+ },
+ "102004": {
+ "Name": "MA2-4:装者同士の戦い",
+ "SummaryText": ""
+ },
+ "102005": {
+ "Name": "MA2-5:S2CA",
+ "SummaryText": ""
+ },
+ "102006": {
+ "Name": "MA2-6:終焉を望む者、終焉に臨む者",
+ "SummaryText": ""
+ },
+ "102007": {
+ "Name": "MA2-7:フィーネの再誕",
+ "SummaryText": ""
+ },
+ "102008": {
+ "Name": "MA2-8:あたしの帰る場所",
+ "SummaryText": ""
+ },
+ "102009": {
+ "Name": "MA2-9:血飛沫の小夜曲・前編",
+ "SummaryText": ""
+ },
+ "102010": {
+ "Name": "MA2-10:血飛沫の小夜曲・後編",
+ "SummaryText": ""
+ },
+ "102011": {
+ "Name": "MA2-11:君でいられなくなるキミに",
+ "SummaryText": ""
+ },
+ "102012": {
+ "Name": "MA2-12:守りたい笑顔",
+ "SummaryText": ""
+ },
+ "102013": {
+ "Name": "MA2-13:繋ぐ手と手…戸惑うわたしのため…",
+ "SummaryText": ""
+ },
+ "102014": {
+ "Name": "MA2-14:消えた陽だまり",
+ "SummaryText": ""
+ },
+ "102015": {
+ "Name": "MA2-15:英雄故事",
+ "SummaryText": ""
+ },
+ "102016": {
+ "Name": "MA2-16:愛の力",
+ "SummaryText": ""
+ },
+ "102017": {
+ "Name": "MA2-17:喪失までのカウントダウン",
+ "SummaryText": ""
+ },
+ "102018": {
+ "Name": "MA2-18:ディスティニーアーク",
+ "SummaryText": ""
+ },
+ "102019": {
+ "Name": "MA2-19:撃槍",
+ "SummaryText": ""
+ },
+ "102020": {
+ "Name": "MA2-20:遥か彼方、星が音楽となった…かの日",
+ "SummaryText": ""
+ },
+ "102041": {
+ "Name": "MA2-21:束の間の平和①",
+ "SummaryText": ""
+ },
+ "102042": {
+ "Name": "MA2-22:束の間の平和②",
+ "SummaryText": ""
+ },
+ "103001": {
+ "Name": "MA3-1:S.O.N.G.始動",
+ "SummaryText": ""
+ },
+ "103002": {
+ "Name": "MA3-2:奇跡の殺戮者",
+ "SummaryText": ""
+ },
+ "103003": {
+ "Name": "MA3-3:世界を壊す──その前に",
+ "SummaryText": ""
+ },
+ "103004": {
+ "Name": "MA3-4:装者たちの黄昏",
+ "SummaryText": ""
+ },
+ "103005": {
+ "Name": "MA3-5:ガングニール、再び",
+ "SummaryText": ""
+ },
+ "103006": {
+ "Name": "MA3-6:Project IGNITE",
+ "SummaryText": ""
+ },
+ "103007": {
+ "Name": "MA3-7:Edge Works",
+ "SummaryText": ""
+ },
+ "103008": {
+ "Name": "MA3-8:抜剣",
+ "SummaryText": ""
+ },
+ "103009": {
+ "Name": "MA3-9:輝きを継ぐ、君らしく",
+ "SummaryText": ""
+ },
+ "103010": {
+ "Name": "MA3-10:向き合う勇気・前編",
+ "SummaryText": ""
+ },
+ "103011": {
+ "Name": "MA3-11:向き合う勇気・後編",
+ "SummaryText": ""
+ },
+ "103012": {
+ "Name": "MA3-12:夢の途中・前編",
+ "SummaryText": ""
+ },
+ "103013": {
+ "Name": "MA3-13:夢の途中・後編",
+ "SummaryText": ""
+ },
+ "103014": {
+ "Name": "MA3-14:英雄再び",
+ "SummaryText": ""
+ },
+ "103015": {
+ "Name": "MA3-15:こんなにも、残酷だけど",
+ "SummaryText": ""
+ },
+ "103016": {
+ "Name": "MA3-16:へいき、へっちゃら",
+ "SummaryText": ""
+ },
+ "103017": {
+ "Name": "MA3-17:世界を壊す歌",
+ "SummaryText": ""
+ },
+ "103018": {
+ "Name": "MA3-18:GX",
+ "SummaryText": ""
+ },
+ "103019": {
+ "Name": "MA3-19:奇跡のカタチ",
+ "SummaryText": ""
+ },
+ "103020": {
+ "Name": "MA3-20:正義を信じて、握り締めて",
+ "SummaryText": ""
+ },
+ "103041": {
+ "Name": "MA3-21:お見送り①",
+ "SummaryText": ""
+ },
+ "103042": {
+ "Name": "MA3-22:お見送り②",
+ "SummaryText": ""
+ },
+ "104001": {
+ "Name": "MA3.5-1:ウォームアップ",
+ "SummaryText": ""
+ },
+ "104002": {
+ "Name": "MA3.5-2:新たな脅威",
+ "SummaryText": ""
+ },
+ "104003": {
+ "Name": "MA3.5-3:錬金術の足跡",
+ "SummaryText": ""
+ },
+ "104004": {
+ "Name": "MA3.5-4:黄金に刻まれた呪い",
+ "SummaryText": ""
+ },
+ "104005": {
+ "Name": "MA3.5-5:歌姫たちの日常",
+ "SummaryText": ""
+ },
+ "104006": {
+ "Name": "MA3.5-6:蠢くもの",
+ "SummaryText": ""
+ },
+ "104007": {
+ "Name": "MA3.5-7:繋がる想い、時を越えて",
+ "SummaryText": ""
+ },
+ "104008": {
+ "Name": "MA3.5-8:エピローグ",
+ "SummaryText": ""
+ },
+ "201001": {
+ "Name": "SI1-1-1:立花響という少女①",
+ "SummaryText": ""
+ },
+ "201002": {
+ "Name": "SI1-1-2:立花響という少女②",
+ "SummaryText": ""
+ },
+ "201003": {
+ "Name": "SI1-1-3:防人の誇り①",
+ "SummaryText": ""
+ },
+ "201004": {
+ "Name": "SI1-1-4:防人の誇り②",
+ "SummaryText": ""
+ },
+ "201005": {
+ "Name": "SI1-1-5:知らない街①",
+ "SummaryText": ""
+ },
+ "201006": {
+ "Name": "SI1-1-6:知らない街②",
+ "SummaryText": ""
+ },
+ "201007": {
+ "Name": "SI1-1-7:お昼当番①",
+ "SummaryText": ""
+ },
+ "201008": {
+ "Name": "SI1-1-8:お昼当番②",
+ "SummaryText": ""
+ },
+ "201009": {
+ "Name": "SI1-1-9:マリアの心配事①",
+ "SummaryText": ""
+ },
+ "201010": {
+ "Name": "SI1-1-10:マリアの心配事②",
+ "SummaryText": ""
+ },
+ "201011": {
+ "Name": "SI1-1-11:おるすばん①",
+ "SummaryText": ""
+ },
+ "201012": {
+ "Name": "SI1-1-12:おるすばん②",
+ "SummaryText": ""
+ },
+ "201015": {
+ "Name": "SI1-1-13:先輩と宿題①",
+ "SummaryText": ""
+ },
+ "201016": {
+ "Name": "SI1-1-14:先輩と宿題②",
+ "SummaryText": ""
+ },
+ "201017": {
+ "Name": "SI1-1-15:クリスの災難、夏の海にて①",
+ "SummaryText": ""
+ },
+ "201018": {
+ "Name": "SI1-1-16:クリスの災難、夏の海にて②",
+ "SummaryText": ""
+ },
+ "201019": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201020": {
+ "Name": "",
+ "SummaryText": ""
+ },
+ "201701": {
+ "Name": "SI1-3-1:未知の敵との接触",
+ "SummaryText": ""
+ },
+ "201801": {
+ "Name": "SI1-2-1:互いを知るために",
+ "SummaryText": ""
+ },
+ "201802": {
+ "Name": "SI1-2-2:3人の装者",
+ "SummaryText": ""
+ },
+ "201803": {
+ "Name": "SI1-2-3:認め合う強さ",
+ "SummaryText": ""
+ },
+ "201804": {
+ "Name": "SI1-2-4:大人の力",
+ "SummaryText": ""
+ },
+ "201805": {
+ "Name": "SI1-2-5:エルフナインの想い",
+ "SummaryText": ""
+ },
+ "201806": {
+ "Name": "SI1-2-6:護りたいものを護るために",
+ "SummaryText": ""
+ },
+ "202001": {
+ "Name": "SI2-1:雨の日の帰り道",
+ "SummaryText": "新しい傘を調と一緒に使いたい切歌\nだが、無常にも調が居ないタイミングで\n雨が降り出してしまい――。"
+ },
+ "202002": {
+ "Name": "SI2-2:翼を休める場所",
+ "SummaryText": "ツヴァイウィングのライブ前夜、不安そう\nにする翼を元気づける奏。しかし、\n翼の胸騒ぎは一向に治まらない。"
+ },
+ "202003": {
+ "Name": "SI2-3:可愛い寝顔",
+ "SummaryText": "とある事情により自宅に戻れなくなり、\n翼の家でお泊りすることになった調だったが――。"
+ },
+ "202004": {
+ "Name": "SI2-4:戦士の休息",
+ "SummaryText": "突然倒れたクリス。どうやら後輩のため\nに頑張りすぎて、あまり寝ていない\n様子。そんなクリスにマリアが――。"
+ },
+ "202005": {
+ "Name": "SI2-5:息抜きデート",
+ "SummaryText": "仕事のしすぎでお疲れのエルフナインを\n気遣い、息抜きにと調が散歩に連れ出すと……。"
+ },
+ "202006": {
+ "Name": "SI2-6:プリンセスハグ",
+ "SummaryText": "新しい服となれないハイヒールを履いた\n切歌。歩きにくそうなその姿を\n見るに見かねた翼が……。"
+ },
+ "202007": {
+ "Name": "SI2-7:バトルプレリュード",
+ "SummaryText": "何度も共に戦ってきた翼とクリス。\n互いに信頼し合う2人には、\nもはや言葉は不要。"
+ },
+ "202008": {
+ "Name": "SI2-8:白衣の診察",
+ "SummaryText": "医療スタッフ不在をいいことに以前から\n興味があったナース服に着替える2人。\nそこに体調を崩したスタッフがやって来て――。"
+ },
+ "202009": {
+ "Name": "SI2-9:戦闘機能特化型の実力",
+ "SummaryText": "毎度毎度キスを迫ってくるミカに\n対して、ガリィがとった秘策とは?"
+ },
+ "202012": {
+ "Name": "SI2-10:ヨガ初体験",
+ "SummaryText": "最近ちょっとお腹の肉付きが気になる\nクリスとマリア。そんな2人が、\nみんなに内緒でヨガに挑戦する。"
+ },
+ "202013": {
+ "Name": "SI2-11:バニーガールズ",
+ "SummaryText": "S.O.N.G.主催のパーティの余興に出て\nくれないかとお願いされる翼とクリス。\n軽い気持ちで引き受ける2人だが……。"
+ },
+ "202014": {
+ "Name": "SI2-39:舞踊演舞",
+ "SummaryText": "新曲の演出のため、着物での踊りの練習を\nする翼と奏。慣れない恰好に苦戦しつつ\n練習を重ねていく。"
+ },
+ "202016": {
+ "Name": "SI2-12:初めてのカラオケ",
+ "SummaryText": "敵情視察という名目で、なぜかカラオケ\nに来たキャロルとエルフナイン。\nくだらないと言いつつも興味深々。"
+ },
+ "202017": {
+ "Name": "SI2-19:最高で最強のステージ",
+ "SummaryText": "夢にまでみた歌姫3人でのステージが\n実現。脇役なんていない、全員が主役。\n今、最高のステージの幕が上がるッ!"
+ },
+ "202018": {
+ "Name": "SI2-13:手料理の味は?",
+ "SummaryText": "クリスの家の台所を借りて料理の練習を\nする未来。いきなりハードルの高い料理\nに挑戦するが……。"
+ },
+ "202019": {
+ "Name": "SI2-14:ドキドキの急接近",
+ "SummaryText": "みんなで楽しくお泊り会ッ!\n定番のレクリエーション王様ゲームで\n選ばれた響とクリスへの命令は?"
+ },
+ "202020": {
+ "Name": "SI2-15:淑女のたしなみ",
+ "SummaryText": "見事な太刀捌きでノイズを刻んでいく\n翼。きっと包丁捌きも上手で料理もでき\nるはずッ!と言われるが果たして……。"
+ },
+ "202021": {
+ "Name": "SI2-20:一日の始まり",
+ "SummaryText": "寝ぼけたまま歯を磨く調。そんな姿を\n見ていられず、世話を焼くマリア。\nその姿は姉妹というより母と娘。"
+ },
+ "202022": {
+ "Name": "SI2-16:マリアの意外な特技",
+ "SummaryText": "戦術向上のため将棋を勧められる翼。\n海外育ちのマリアになら余裕で\n勝てるだろうと挑むが――。"
+ },
+ "202023": {
+ "Name": "SI2-35:茶道体験",
+ "SummaryText": "茶道に興味を持ち、やってみたいという調。\n初めて体験するお茶の苦みに\n強がりを見せる調だが――。"
+ },
+ "202024": {
+ "Name": "SI2-42:ツインギター",
+ "SummaryText": "うまく連携の取れないクリスと切歌。\n互いをもっと知るために一緒に音楽を\nやってみることになるのだが……。"
+ },
+ "202025": {
+ "Name": "SI2-49:忍術修業中",
+ "SummaryText": "慣れない水上での戦いに苦戦する装者たち。\n水上を自在に移動できれば……\nと考えていると、調が何かを思いつく。"
+ },
+ "202026": {
+ "Name": "SI2-37:艶やかな2人",
+ "SummaryText": "おしとやかで大人っぽい、そんな\n大和撫子になりたい切歌が、先輩の\nクリスを巻き込んでとった行動とは?"
+ },
+ "202027": {
+ "Name": "SI2-34:着付に挑戦",
+ "SummaryText": "今日は着物での特別授業。\n着付けの出来ない響を手伝う未来だが、\nどんどんおかしなことになってしまい……。"
+ },
+ "202028": {
+ "Name": "SI2-38:ガリィ流の華道",
+ "SummaryText": "可愛い着物姿にノリノリのガリィ。\n内心は超面倒と思いつつ、\n勢いに任せて生け花に挑戦。"
+ },
+ "202029": {
+ "Name": "SI2-17:2人だけのパジャマパーティー",
+ "SummaryText": "疲れて帰って来た響を、優しく出迎える未来。\nそんな2人の陽だまりは、\nもはや何者も侵すことはできない。"
+ },
+ "202030": {
+ "Name": "SI2-18:ミッション遂行中",
+ "SummaryText": "最近、何か様子のおかしい響と切歌。\n2人を心配する未来と調は、潜入美人\n捜査官メガネをかけて追跡を開始する。"
+ },
+ "202031": {
+ "Name": "SI2-21:疲労困憊",
+ "SummaryText": "弦十郎による愛の特訓に耐え抜いた\n装者たち。もはや立ち上がる力も、\n話す気力も残されていない。"
+ },
+ "202032": {
+ "Name": "SI2-22:奏のバースデー2017",
+ "SummaryText": "装者たちで奏の誕生日パーティを開催。\nどのタイミングで奏にプレゼントを\n渡そうか悩んでいる翼に奏が――。"
+ },
+ "202033": {
+ "Name": "SI2-23:マリアのバースデー2017",
+ "SummaryText": "最近、調と切歌の様子がおかしいと心配する\nマリア。悩みがあるなら言って欲しい……。\nそんなことを考えながら家に帰ると――。"
+ },
+ "202034": {
+ "Name": "SI2-24:縁側で一休み",
+ "SummaryText": "夏の暑さで体調を崩してしまう調。\nみんなが心配する中、奏が看病をかってでる。"
+ },
+ "202035": {
+ "Name": "SI2-25:おさかな集合大作戦",
+ "SummaryText": "海水浴中の響と切歌。\nお魚たちに餌をあげると、\n予想以上に沢山集まってきてしまい――。"
+ },
+ "202036": {
+ "Name": "SI2-26:暑さを凌ぐ良い方法",
+ "SummaryText": "バイクを洗車中の翼の元に未来が通りかかる。\nこんな暑い日はわたしも水を浴びたいです、\nと言う未来の願いを早速叶えてあげる翼。"
+ },
+ "202037": {
+ "Name": "SI2-27:サマーウエイトレス",
+ "SummaryText": "海の家で手伝いをすることになった\nクリスとマリア。水着エプロンという格好\nと慣れない接客のせいで悪戦苦闘する2人。"
+ },
+ "202038": {
+ "Name": "SI2-28:響のバースデー2017",
+ "SummaryText": "響の誕生日プレゼントに悩む未来に\n奏が「インパクト勝負だッ!」と提案、\n2人で考えた響へのプレゼントとは――。"
+ },
+ "202039": {
+ "Name": "SI2-29:切歌の寝ぼけ癖",
+ "SummaryText": "とある日の朝、幸せそうに布団に包まる切歌。\n遅刻を心配し、何とか起こそうとするマリア。\n2人の壮絶な戦いが今始まる。"
+ },
+ "202040": {
+ "Name": "SI2-30:悪戯な暇つぶし",
+ "SummaryText": "レイアの驚いた表情が見たいガリィが\n様々な方法でレイアを驚かそうとする。\nガリィのただの暇つぶし。"
+ },
+ "202041": {
+ "Name": "SI2-31:奏の極楽マッサージ",
+ "SummaryText": "戦いの後、ストレッチの重要性を\n甘く見た切歌に降りかかる災難とは――。"
+ },
+ "202042": {
+ "Name": "SI2-32:雨に濡れて",
+ "SummaryText": "雨でびしょ濡れになったクリスと調。\n互いに乾かしながら過ぎて行く優しい時間。"
+ },
+ "202043": {
+ "Name": "SI2-33:夏服の歌姫たち",
+ "SummaryText": "学生服を懐かしく感じ、\n久々に着て見たくなった奏、マリアを\n巻き込んで強引に試着をしようとする。"
+ },
+ "202044": {
+ "Name": "SI2-36:セレナのバースデー2017",
+ "SummaryText": "プリンの美味しさに満面の笑みを浮かべる\nセレナ。でも本当に嬉しいのは、大好きな\n姉と一緒に美味しい物を食べれること。"
+ },
+ "202045": {
+ "Name": "SI2-40:未来のバースデー2017",
+ "SummaryText": "今日は未来の誕生日、しかし、響は緊急の\n呼び出しで出て行ってしまう。1人での\n誕生日は寂しいな……と感じていると――。"
+ },
+ "202047": {
+ "Name": "SI2-41:クリスの氷上訓練",
+ "SummaryText": "連携強化のためにアイススケートを\nすることになったクリスと調。\n滑ることが得意な調に対してクリスは……"
+ },
+ "202048": {
+ "Name": "SI2-43:お風呂上りのひと時",
+ "SummaryText": "夜、戦いの疲れをお風呂で取り、\n自室にて休むマリア。1人でいることに\n少し寂しさを感じていると、突然電話が鳴る。"
+ },
+ "202049": {
+ "Name": "SI2-44:露天風呂パニック",
+ "SummaryText": "仕事のしすぎな友里にしっかり休むよう\nに言う弦十郎。偶然こちらに来ていた奏と\n一緒に弦十郎の勧める温泉に行くことに。"
+ },
+ "202050": {
+ "Name": "SI2-45:クリスマスの天使たち",
+ "SummaryText": "地域ボランティアの一環で、子供たちの\nためのクリスマス会に参加することになった\n響たち。出し物はオリジナルの演劇。"
+ },
+ "202051": {
+ "Name": "SI2-47:Happy New Year 2018",
+ "SummaryText": "新年あけましておめでとうございますッ!\nきっと今年も大変な1年になりそうだけど、\nとりあえず今は正月を楽しもうと決めた3人。"
+ },
+ "202052": {
+ "Name": "SI2-46:クリスのバースデー2017",
+ "SummaryText": "ついに来たクリスの誕生日。\n切歌たちの計画、クリスを泣かせよう作戦は\n果たして成功するのかッ!?"
+ },
+ "202053": {
+ "Name": "SI2-48:羽根つき勝負",
+ "SummaryText": "お正月某日、S.O.N.G.内で\n行われることになった装者対抗羽根つき大会。\n余裕そうに振る舞うクリスだったが……。"
+ },
+ "202054": {
+ "Name": "SI2-50:大凧で空へ",
+ "SummaryText": "空から迅速に現場へ移動可能な緒川の\n忍術に憧れを抱いた翼は、緒川に\n伝授して頂けないかとお願いをする。"
+ },
+ "202055": {
+ "Name": "SI2-51:メイドでお仕事",
+ "SummaryText": "装者たちの戦いの影響を受け、オープンで\nきなくなったとある喫茶店。罪悪感にから\nれたマリアたちがお手伝いをすることに。"
+ },
+ "202056": {
+ "Name": "SI2-52:チョコケーキ大作戦",
+ "SummaryText": "大好きな人に食べてもらいたいッ!\nその想いを胸にケーキ作りに挑戦する3人。\n果たしてどんなケーキに仕上がるのか……。"
+ },
+ "202057": {
+ "Name": "SI2-53:調のバースデー2018",
+ "SummaryText": "ついに来た調の誕生日。\n切歌の悩みに悩んだサプライズが\n火を噴くッ! 調の反応はいかに?"
+ },
+ "202058": {
+ "Name": "SI2-54:居合の心得",
+ "SummaryText": "こっそりと翼の強さの秘密を探る未来と調。\n途中で見つかり、事情を知った翼は、\n2人を居合の練習に付き合わせることに。"
+ },
+ "202059": {
+ "Name": "SI2-55:制服の魅力",
+ "SummaryText": "学校に憧れを抱くセレナ。形だけでもと、\n調からリディアンの制服を借りて\n着てみることに。"
+ },
+ "202060": {
+ "Name": "SI2-56:紳士的なお出迎え",
+ "SummaryText": "ホワイトデーのプレゼントがなかなか\n決まらない響と翼。手伝って欲しいと\n調にお願いすると、ある提案をされて……?"
+ },
+ "202061": {
+ "Name": "SI2-57:ひな人形の並べ方",
+ "SummaryText": "もうすぐひな祭りッ!\n装者の形をしたひな人形をめぐって\nバトルが勃発ッ!?"
+ },
+ "202062": {
+ "Name": "SI2-58:夜の学校",
+ "SummaryText": "宿題のノートを学院に忘れてしまった切歌。\n怖がりながらも暗い廊下を進んでいくと、\nどこからともなく足音が聞こえてきて……?"
+ },
+ "202063": {
+ "Name": "SI2-59:可愛いお雛様",
+ "SummaryText": "ひな人形が気に入った様子のセレナ。\n同じ服を着せてあげたいと考えるマリアに\n翼がある提案をして……?"
+ },
+ "202064": {
+ "Name": "SI2-60:早朝トレーニング",
+ "SummaryText": "もうすぐマラソン大会ッ!響たちと一緒に\n練習に参加することにしたクリスだったが、\nその内容は予想以上にハードでッ!?"
+ },
+ "202065": {
+ "Name": "SI2-61:中国拳法大特訓",
+ "SummaryText": "中国拳法の特訓をすることになった翼。\n響の主張によると、特訓にはある衣装が\n必要不可欠らしくて……ッ!?"
+ },
+ "202066": {
+ "Name": "SI2-62:愛情表現",
+ "SummaryText": "大きな犬と会った調、切歌、セレナの3人。\nフライングディスクで意外な才能を発揮した\nセレナに、ワンコの愛情表現が炸裂するッ!"
+ },
+ "202067": {
+ "Name": "SI2-63:切歌のバースデー2018",
+ "SummaryText": "ついに来た切歌の誕生日ッ!\nみんなにお祝いしてもらう準備万全で当日を\n迎えた切歌だったが……?"
+ },
+ "203001": {
+ "Name": "SI3-1-1:弦十郎との修行①",
+ "SummaryText": ""
+ },
+ "203002": {
+ "Name": "SI3-1-2:弦十郎との修行②",
+ "SummaryText": ""
+ },
+ "203003": {
+ "Name": "SI3-1-3:弦十郎との修行③",
+ "SummaryText": ""
+ },
+ "203004": {
+ "Name": "SI3-1-4:弦十郎との修行④",
+ "SummaryText": ""
+ },
+ "203005": {
+ "Name": "SI3-2-1:女子力強化①",
+ "SummaryText": ""
+ },
+ "203006": {
+ "Name": "SI3-2-2:女子力強化②",
+ "SummaryText": ""
+ },
+ "203007": {
+ "Name": "SI3-2-3:女子力強化③",
+ "SummaryText": ""
+ },
+ "203008": {
+ "Name": "SI3-2-4:女子力強化④",
+ "SummaryText": ""
+ },
+ "203009": {
+ "Name": "SI3-3-1:頼りになる先輩①",
+ "SummaryText": ""
+ },
+ "203010": {
+ "Name": "SI3-3-2:頼りになる先輩②",
+ "SummaryText": ""
+ },
+ "203011": {
+ "Name": "SI3-3-3:頼りになる先輩③",
+ "SummaryText": ""
+ },
+ "203012": {
+ "Name": "SI3-3-4:頼りになる先輩④",
+ "SummaryText": ""
+ },
+ "203013": {
+ "Name": "SI3-4-1:引っ込み思案な私①",
+ "SummaryText": ""
+ },
+ "203014": {
+ "Name": "SI3-4-2:引っ込み思案な私②",
+ "SummaryText": ""
+ },
+ "203015": {
+ "Name": "SI3-4-3:引っ込み思案な私③",
+ "SummaryText": ""
+ },
+ "203016": {
+ "Name": "SI3-4-4:引っ込み思案な私④",
+ "SummaryText": ""
+ },
+ "203017": {
+ "Name": "SI3-5-1:調の倹約術①",
+ "SummaryText": ""
+ },
+ "203018": {
+ "Name": "SI3-5-2:調の倹約術②",
+ "SummaryText": ""
+ },
+ "203019": {
+ "Name": "SI3-5-3:調の倹約術③",
+ "SummaryText": ""
+ },
+ "203020": {
+ "Name": "SI3-5-4:調の倹約術④",
+ "SummaryText": ""
+ },
+ "203021": {
+ "Name": "SI3-6-1:手紙を求めて①",
+ "SummaryText": ""
+ },
+ "203022": {
+ "Name": "SI3-6-2:手紙を求めて②",
+ "SummaryText": ""
+ },
+ "203023": {
+ "Name": "SI3-6-3:手紙を求めて③",
+ "SummaryText": ""
+ },
+ "203024": {
+ "Name": "SI3-6-4:手紙を求めて④",
+ "SummaryText": ""
+ },
+ "203025": {
+ "Name": "SI3-7-1:ワイルドな生活①",
+ "SummaryText": ""
+ },
+ "203026": {
+ "Name": "SI3-7-2:ワイルドな生活②",
+ "SummaryText": ""
+ },
+ "203027": {
+ "Name": "SI3-7-3:ワイルドな生活③",
+ "SummaryText": ""
+ },
+ "203028": {
+ "Name": "SI3-7-4:ワイルドな生活④",
+ "SummaryText": ""
+ },
+ "203029": {
+ "Name": "SI3-8-1:装者としての心構え①",
+ "SummaryText": ""
+ },
+ "203030": {
+ "Name": "SI3-8-2:装者としての心構え②",
+ "SummaryText": ""
+ },
+ "203031": {
+ "Name": "SI3-8-3:装者としての心構え③",
+ "SummaryText": ""
+ },
+ "203033": {
+ "Name": "SI3-9-1:妹としてできること①",
+ "SummaryText": ""
+ },
+ "203034": {
+ "Name": "SI3-9-2:妹としてできること②",
+ "SummaryText": ""
+ },
+ "203035": {
+ "Name": "SI3-9-3:妹としてできること③",
+ "SummaryText": ""
+ },
+ "203036": {
+ "Name": "SI3-9-4:妹としてできること④",
+ "SummaryText": ""
+ },
+ "304001": {
+ "Name": "EV3-1:思い思いの夏",
+ "SummaryText": ""
+ },
+ "304002": {
+ "Name": "EV3-2:南国の島",
+ "SummaryText": ""
+ },
+ "304003": {
+ "Name": "EV3-3:適応するギア",
+ "SummaryText": ""
+ },
+ "304004": {
+ "Name": "EV3-4:セイレーンの歌",
+ "SummaryText": ""
+ },
+ "304005": {
+ "Name": "EV3-5:心象変化",
+ "SummaryText": ""
+ },
+ "304006": {
+ "Name": "EV3-6:砕けた聖遺物",
+ "SummaryText": ""
+ },
+ "304007": {
+ "Name": "EV3-7:サバイバルライフ",
+ "SummaryText": ""
+ },
+ "304008": {
+ "Name": "EV3-8:アイランドサーチ",
+ "SummaryText": ""
+ },
+ "304009": {
+ "Name": "EV3-9:黒いクジラ",
+ "SummaryText": ""
+ },
+ "304010": {
+ "Name": "EV3-10:洞窟探検",
+ "SummaryText": ""
+ },
+ "304011": {
+ "Name": "EV3-11:トラップ×トラップ・前編",
+ "SummaryText": ""
+ },
+ "304012": {
+ "Name": "EV3-12:トラップ×トラップ・後編",
+ "SummaryText": ""
+ },
+ "304013": {
+ "Name": "EV3-13:海底遺跡中枢",
+ "SummaryText": ""
+ },
+ "304014": {
+ "Name": "EV3-14:大脱出",
+ "SummaryText": ""
+ },
+ "304015": {
+ "Name": "EV3-15:装者たちの夏休み",
+ "SummaryText": ""
+ },
+ "307101": {
+ "Name": "EV6-S1:うまいもんマップ完成を目指して①",
+ "SummaryText": ""
+ },
+ "307102": {
+ "Name": "EV6-S2:うまいもんマップ完成を目指して②",
+ "SummaryText": ""
+ },
+ "307103": {
+ "Name": "EV6-S3:「あったかいもの」の秘密①",
+ "SummaryText": ""
+ },
+ "307104": {
+ "Name": "EV6-S4:「あったかいもの」の秘密②",
+ "SummaryText": ""
+ },
+ "308001": {
+ "Name": "EV7-1:未確認アルカ・ノイズ襲来",
+ "SummaryText": ""
+ },
+ "308007": {
+ "Name": "EV7-7:未確認アルカ・ノイズ襲来(港)",
+ "SummaryText": ""
+ },
+ "308008": {
+ "Name": "EV7-8:未確認アルカ・ノイズ襲来(街)",
+ "SummaryText": ""
+ },
+ "309001": {
+ "Name": "EV8-1:いざ出陣",
+ "SummaryText": ""
+ },
+ "309002": {
+ "Name": "EV8-2:装者不在の世界",
+ "SummaryText": ""
+ },
+ "309003": {
+ "Name": "EV8-3:哲学兵装ムラマサ",
+ "SummaryText": ""
+ },
+ "309004": {
+ "Name": "EV8-4:国を守る者たち",
+ "SummaryText": ""
+ },
+ "309005": {
+ "Name": "EV8-5:世界の救世主",
+ "SummaryText": ""
+ },
+ "309006": {
+ "Name": "EV8-6:並行世界での生活",
+ "SummaryText": ""
+ },
+ "309007": {
+ "Name": "EV8-7:和装ギアの実力",
+ "SummaryText": ""
+ },
+ "309008": {
+ "Name": "EV8-8:それぞれの役割",
+ "SummaryText": ""
+ },
+ "309009": {
+ "Name": "EV8-9:結束",
+ "SummaryText": ""
+ },
+ "309010": {
+ "Name": "EV8-10:黒い武者ノイズ",
+ "SummaryText": ""
+ },
+ "309011": {
+ "Name": "EV8-11:新たな課題",
+ "SummaryText": ""
+ },
+ "309012": {
+ "Name": "EV8-12:互いを知るための特訓",
+ "SummaryText": ""
+ },
+ "309013": {
+ "Name": "EV8-13:ラストスパート",
+ "SummaryText": ""
+ },
+ "309014": {
+ "Name": "EV8-14:和装乱舞",
+ "SummaryText": ""
+ },
+ "309015": {
+ "Name": "EV8-15:可愛い後輩、可愛い先輩",
+ "SummaryText": ""
+ },
+ "311001": {
+ "Name": "EV10-1:天体観測①",
+ "SummaryText": ""
+ },
+ "311005": {
+ "Name": "EV10-2:天体観測②",
+ "SummaryText": ""
+ },
+ "313001": {
+ "Name": "EV1-1:ギャラルホルン",
+ "SummaryText": ""
+ },
+ "313002": {
+ "Name": "EV1-2:IFの世界",
+ "SummaryText": ""
+ },
+ "313003": {
+ "Name": "EV1-3:片翼の奏者",
+ "SummaryText": ""
+ },
+ "313004": {
+ "Name": "EV1-4:黒いノイズ",
+ "SummaryText": ""
+ },
+ "313005": {
+ "Name": "EV1-5:交錯する想い",
+ "SummaryText": ""
+ },
+ "313006": {
+ "Name": "EV1-6:封じられた力",
+ "SummaryText": ""
+ },
+ "313007": {
+ "Name": "EV1-7:侵食する世界",
+ "SummaryText": ""
+ },
+ "313008": {
+ "Name": "EV1-8:復讐の歌",
+ "SummaryText": ""
+ },
+ "313009": {
+ "Name": "EV1-9:憎しみと後悔",
+ "SummaryText": ""
+ },
+ "313010": {
+ "Name": "EV1-10:受け継がれた想い",
+ "SummaryText": ""
+ },
+ "313011": {
+ "Name": "EV1-11:カルマノイズ殲滅作戦",
+ "SummaryText": ""
+ },
+ "313012": {
+ "Name": "EV1-12:「あたし」のいないステージ",
+ "SummaryText": ""
+ },
+ "313013": {
+ "Name": "EV1-13:七人の装者",
+ "SummaryText": ""
+ },
+ "313014": {
+ "Name": "EV1-14:逆光のリゾルヴ",
+ "SummaryText": ""
+ },
+ "313015": {
+ "Name": "EV1-15:両翼は再び空を舞う",
+ "SummaryText": ""
+ },
+ "317001": {
+ "Name": "EV14-S1:雪上のクリスマス①",
+ "SummaryText": ""
+ },
+ "317002": {
+ "Name": "EV14-S2:雪上のクリスマス②",
+ "SummaryText": ""
+ },
+ "317003": {
+ "Name": "EV14-S3:雪上のクリスマス③",
+ "SummaryText": ""
+ },
+ "319001": {
+ "Name": "EV15-S1:暁のサンタクロース:前編",
+ "SummaryText": ""
+ },
+ "319002": {
+ "Name": "EV15-S2:暁のサンタクロース:中編",
+ "SummaryText": ""
+ },
+ "319003": {
+ "Name": "EV15-S3:暁のサンタクロース:後編",
+ "SummaryText": ""
+ },
+ "321001": {
+ "Name": "EV17-S1:端月の神隠し",
+ "SummaryText": ""
+ },
+ "321002": {
+ "Name": "EV17-S2:迷宮屋敷",
+ "SummaryText": ""
+ },
+ "321003": {
+ "Name": "EV17-S3:心象に描かれたモノ",
+ "SummaryText": ""
+ },
+ "321004": {
+ "Name": "EV17-S4:痕跡を辿って",
+ "SummaryText": ""
+ },
+ "321005": {
+ "Name": "EV17-S5:振袖の怪物",
+ "SummaryText": ""
+ },
+ "321006": {
+ "Name": "EV17-S6:振袖に刻まれた呪い",
+ "SummaryText": ""
+ },
+ "321007": {
+ "Name": "EV17-S7:迷宮からの声",
+ "SummaryText": ""
+ },
+ "321008": {
+ "Name": "EV17-S8:大火の振袖",
+ "SummaryText": ""
+ },
+ "321009": {
+ "Name": "EV17-S9:哀哭を絶つ剣",
+ "SummaryText": ""
+ },
+ "321010": {
+ "Name": "EV17-S10:翼と振袖",
+ "SummaryText": ""
+ },
+ "322055": {
+ "Name": "EV9-S1:先覚の協力者・フィーネ①",
+ "SummaryText": ""
+ },
+ "322056": {
+ "Name": "EV9-S2:先覚の協力者・フィーネ②",
+ "SummaryText": ""
+ },
+ "322057": {
+ "Name": "EV9-S3:先覚の協力者・フィーネ③",
+ "SummaryText": ""
+ },
+ "323055": {
+ "Name": "EV12-S1:先覚の協力者・ウェル博士①",
+ "SummaryText": ""
+ },
+ "323056": {
+ "Name": "EV12-S2:先覚の協力者・ウェル博士②",
+ "SummaryText": ""
+ },
+ "323057": {
+ "Name": "EV12-S3:先覚の協力者・ウェル博士③",
+ "SummaryText": ""
+ },
+ "324001": {
+ "Name": "EV18-S1:集いし先覚者",
+ "SummaryText": ""
+ },
+ "324002": {
+ "Name": "EV18-S2:不滅の刃",
+ "SummaryText": ""
+ },
+ "324003": {
+ "Name": "EV18-S3:唯一の居場所",
+ "SummaryText": ""
+ },
+ "324004": {
+ "Name": "EV18-S4:インターミッション",
+ "SummaryText": ""
+ },
+ "324005": {
+ "Name": "EV18-S5:二課潜入",
+ "SummaryText": ""
+ },
+ "324006": {
+ "Name": "EV18-S6:フィーネの企み",
+ "SummaryText": ""
+ },
+ "324007": {
+ "Name": "EV18-S7:ウェル襲撃",
+ "SummaryText": ""
+ },
+ "324008": {
+ "Name": "EV18-S8:激戦",
+ "SummaryText": ""
+ },
+ "324009": {
+ "Name": "EV18-S9:遅れてきた先覚者",
+ "SummaryText": ""
+ },
+ "324010": {
+ "Name": "EV18-S10:RN式回天特機装束",
+ "SummaryText": ""
+ },
+ "324011": {
+ "Name": "EV18-S11:Recapture Operation",
+ "SummaryText": ""
+ },
+ "324012": {
+ "Name": "EV18-S12:決戦・フィーネ",
+ "SummaryText": ""
+ },
+ "324013": {
+ "Name": "EV18-S13:穢れた赤き竜",
+ "SummaryText": ""
+ },
+ "324014": {
+ "Name": "EV18-S14:拳",
+ "SummaryText": ""
+ },
+ "324015": {
+ "Name": "EV18-S15:ふたりの時間",
+ "SummaryText": ""
+ },
+ "325001": {
+ "Name": "EV19-S1:小さな勇気",
+ "SummaryText": ""
+ },
+ "325002": {
+ "Name": "EV19-S2:もうひとりのセレナ",
+ "SummaryText": ""
+ },
+ "325003": {
+ "Name": "EV19-S3:ネフィリム再び",
+ "SummaryText": ""
+ },
+ "325004": {
+ "Name": "EV19-S4:変わらない妹",
+ "SummaryText": ""
+ },
+ "325005": {
+ "Name": "EV19-S5:もうひとつの結末",
+ "SummaryText": ""
+ },
+ "325006": {
+ "Name": "EV19-S6:目覚めた日のこと",
+ "SummaryText": ""
+ },
+ "325007": {
+ "Name": "EV19-S7:可愛らしい客人",
+ "SummaryText": ""
+ },
+ "325008": {
+ "Name": "EV19-S8:悪夢の予感",
+ "SummaryText": ""
+ },
+ "325009": {
+ "Name": "EV19-S9:増殖する脅威",
+ "SummaryText": ""
+ },
+ "325010": {
+ "Name": "EV19-S10:わたしでないわたしのために",
+ "SummaryText": ""
+ },
+ "325011": {
+ "Name": "EV19-S11:家族",
+ "SummaryText": ""
+ },
+ "325012": {
+ "Name": "EV19-S12:大好きの絆",
+ "SummaryText": ""
+ },
+ "325013": {
+ "Name": "EV19-S13:偽りの姉妹",
+ "SummaryText": ""
+ },
+ "325014": {
+ "Name": "EV19-S14:イノセント・シスター",
+ "SummaryText": ""
+ },
+ "325015": {
+ "Name": "EV19-S15:姉妹",
+ "SummaryText": ""
+ },
+ "326001": {
+ "Name": "EV20-S1:エキスパート・メイド:前編",
+ "SummaryText": ""
+ },
+ "326002": {
+ "Name": "EV20-S2:エキスパート・メイド:中編",
+ "SummaryText": ""
+ },
+ "326003": {
+ "Name": "EV20-S3:エキスパート・メイド:後編",
+ "SummaryText": ""
+ },
+ "327001": {
+ "Name": "EV21-S1:これがわたしのメイド道ッ!:前編",
+ "SummaryText": ""
+ },
+ "327002": {
+ "Name": "EV21-S2:これがわたしのメイド道ッ!:中編",
+ "SummaryText": ""
+ },
+ "327003": {
+ "Name": "EV21-S3:これがわたしのメイド道ッ!:後編",
+ "SummaryText": ""
+ },
+ "328001": {
+ "Name": "EV23-S1:夜を翔ける少女",
+ "SummaryText": ""
+ },
+ "328002": {
+ "Name": "EV23-S2:怪盗への道",
+ "SummaryText": ""
+ },
+ "328003": {
+ "Name": "EV23-S3:誕生、怪盗ファントムシスターズ",
+ "SummaryText": ""
+ },
+ "328004": {
+ "Name": "EV23-S4:潜入、豪華客船",
+ "SummaryText": ""
+ },
+ "328005": {
+ "Name": "EV23-S5:暗躍する影",
+ "SummaryText": ""
+ },
+ "328006": {
+ "Name": "EV23-S6:怪盗の日常",
+ "SummaryText": ""
+ },
+ "328007": {
+ "Name": "EV23-S7:3人目の怪盗",
+ "SummaryText": ""
+ },
+ "328008": {
+ "Name": "EV23-S8:捕える者たちとの攻防",
+ "SummaryText": ""
+ },
+ "328009": {
+ "Name": "EV23-S9:夜空を舞う怪盗姉妹",
+ "SummaryText": ""
+ },
+ "328010": {
+ "Name": "EV23-S10:怪盗姉妹は永遠に",
+ "SummaryText": ""
+ },
+ "330001": {
+ "Name": "EV24-S1:竜を討つ魔剣:前編",
+ "SummaryText": ""
+ },
+ "330002": {
+ "Name": "EV24-S2:竜を討つ魔剣:中編",
+ "SummaryText": ""
+ },
+ "330003": {
+ "Name": "EV24-S3:竜を討つ魔剣:後編",
+ "SummaryText": ""
+ },
+ "331001": {
+ "Name": "EV25-S1:不死身の英雄:前編",
+ "SummaryText": ""
+ },
+ "331002": {
+ "Name": "EV25-S2:不死身の英雄:中編",
+ "SummaryText": ""
+ },
+ "331003": {
+ "Name": "EV25-S3:不死身の英雄:後編",
+ "SummaryText": ""
+ },
+ "332001": {
+ "Name": "EV26-S1:謎の海賊船",
+ "SummaryText": ""
+ },
+ "332002": {
+ "Name": "EV26-S2:海賊の掟",
+ "SummaryText": ""
+ },
+ "332003": {
+ "Name": "EV26-S3:大海賊ブラックバート",
+ "SummaryText": ""
+ },
+ "332004": {
+ "Name": "EV26-S4:捕虜の生活",
+ "SummaryText": ""
+ },
+ "332005": {
+ "Name": "EV26-S5:海賊船長との決闘",
+ "SummaryText": ""
+ },
+ "332006": {
+ "Name": "EV26-S6:急襲の錬金術師",
+ "SummaryText": ""
+ },
+ "332007": {
+ "Name": "EV26-S7:海賊の生活",
+ "SummaryText": ""
+ },
+ "332008": {
+ "Name": "EV26-S8:海賊の財宝",
+ "SummaryText": ""
+ },
+ "332009": {
+ "Name": "EV26-S9:海上大激戦",
+ "SummaryText": ""
+ },
+ "332010": {
+ "Name": "EV26-S10:海賊の証",
+ "SummaryText": ""
+ },
+ "332030": {
+ "Name": "EV26-BS:海賊の絆",
+ "SummaryText": ""
+ },
+ "333001": {
+ "Name": "EV27-S1:燃えよッ!カンフーマスター:前編",
+ "SummaryText": ""
+ },
+ "333002": {
+ "Name": "EV27-S2:燃えよッ!カンフーマスター:中編",
+ "SummaryText": ""
+ },
+ "333003": {
+ "Name": "EV27-S3:燃えよッ!カンフーマスター:後編",
+ "SummaryText": ""
+ },
+ "335001": {
+ "Name": "EV5-1:翳る太陽",
+ "SummaryText": ""
+ },
+ "335002": {
+ "Name": "EV5-2:暗い夢の中",
+ "SummaryText": ""
+ },
+ "335003": {
+ "Name": "EV5-3:異変究明",
+ "SummaryText": ""
+ },
+ "335004": {
+ "Name": "EV5-4:陽だまりの無い世界",
+ "SummaryText": ""
+ },
+ "335005": {
+ "Name": "EV5-5:精神同調",
+ "SummaryText": ""
+ },
+ "335006": {
+ "Name": "EV5-6:決意",
+ "SummaryText": ""
+ },
+ "335007": {
+ "Name": "EV5-7:神獣鏡、起動",
+ "SummaryText": ""
+ },
+ "335008": {
+ "Name": "EV5-8:未来の戦い",
+ "SummaryText": ""
+ },
+ "335009": {
+ "Name": "EV5-9:地中からの脅威",
+ "SummaryText": ""
+ },
+ "335010": {
+ "Name": "EV5-10:救うための戦い",
+ "SummaryText": ""
+ },
+ "335011": {
+ "Name": "EV5-11:侵食",
+ "SummaryText": ""
+ },
+ "335012": {
+ "Name": "EV5-12:嘆く心",
+ "SummaryText": ""
+ },
+ "335013": {
+ "Name": "EV5-13:装者になった理由",
+ "SummaryText": ""
+ },
+ "335014": {
+ "Name": "EV5-14:翳り裂く閃光",
+ "SummaryText": ""
+ },
+ "335015": {
+ "Name": "EV5-15:わたしのいるべき場所",
+ "SummaryText": ""
+ },
+ "336001": {
+ "Name": "EV27-S1:高速のアルカ・ノイズ",
+ "SummaryText": ""
+ },
+ "336002": {
+ "Name": "EV27-S2:ハイウェイ・チェイス",
+ "SummaryText": ""
+ },
+ "336003": {
+ "Name": "EV27-S3:速さへの心象実験",
+ "SummaryText": ""
+ },
+ "336004": {
+ "Name": "EV27-S4:ライダー型ギア",
+ "SummaryText": ""
+ },
+ "336005": {
+ "Name": "EV27-S5:予期せぬ邂逅",
+ "SummaryText": ""
+ },
+ "336006": {
+ "Name": "EV27-S6:死のレース",
+ "SummaryText": ""
+ },
+ "336007": {
+ "Name": "EV27-S7:スピードを求めて",
+ "SummaryText": ""
+ },
+ "336008": {
+ "Name": "EV27-S8:決戦の日",
+ "SummaryText": ""
+ },
+ "336009": {
+ "Name": "EV27-S9:Beyond the Speed",
+ "SummaryText": ""
+ },
+ "336010": {
+ "Name": "EV27-S10:わたしの相棒",
+ "SummaryText": ""
+ },
+ "336016": {
+ "Name": "EV27-BS:戦いのあと",
+ "SummaryText": ""
+ }
+}
\ No newline at end of file
diff --git a/Js/UtageParse.js b/Js/UtageParse.js
index 23f4256..b110041 100644
--- a/Js/UtageParse.js
+++ b/Js/UtageParse.js
@@ -5,7 +5,7 @@ class UtageInfo {
constructor() {
this.currentPlayingFile = [];
this.rootDirectory = ``;
- this.availableMissions = {};
+ this.groupedMissions = {};
this.missionsList = [];
this.characterInfo = {};
this.layerInfo = {};
@@ -13,9 +13,10 @@ class UtageInfo {
this.paramInfo = {};
this.soundInfo = {};
this.textureInfo = {};
- this.translationsInner = {};
this.currentTranslation = 'eng';
+ this.translationsInner = {};
this.charTranslationsInner = {};
+ this.missionTranslationsInner = {};
this.bgmLoopData = {};
}
@@ -34,9 +35,9 @@ class UtageInfo {
];
Promise.all(promises)
.then((success) => {
- this.availableMissions = success[0];
- this.missionsList = Object.keys(this.availableMissions).map((k) => {
- return `${this.availableMissions[k].Id}|${this.availableMissions[k].Name}`;
+ this.groupMissions(success[0]);
+ this.missionsList = Object.keys(this.groupedMissions).map((k) => {
+ return {Name: this.groupedMissions[k].Name, MstId: this.groupedMissions[k].MstId};
});
this.missionsList.sort();
this.parseCharacterInfo(success[1]);
@@ -79,6 +80,24 @@ class UtageInfo {
});
}
+
+ groupMissions(missions) {
+ for(let key of Object.keys(missions)) {
+ let mis = missions[key];
+ if(!this.groupedMissions[mis.MstId]) {
+ this.groupedMissions[mis.MstId] = {
+ Name: mis.Name,
+ SummaryText: mis.SummaryText,
+ MstId: mis.MstId,
+ Missions: {}
+ }
+ this.groupedMissions[mis.MstId].Missions[mis.Id] = { Id: mis.Id, Path: mis.Path };
+ } else {
+ this.groupedMissions[mis.MstId].Missions[mis.Id] = { Id: mis.Id, Path: mis.Path };
+ }
+ }
+ }
+
get translations() {
return this.translationsInner[this.currentTranslation];
}
@@ -87,10 +106,15 @@ class UtageInfo {
return this.charTranslationsInner[this.currentTranslation];
}
+ get missionTranslations() {
+ return this.missionTranslationsInner[this.currentTranslation];
+ }
+
setTranslationLanguage(key, missionPath) {
return new Promise((resolve, reject) => {
this.currentTranslation = key;
- var promises = [this.loadCharacterTranslations(key)];
+ let promises = [this.loadCharacterTranslations(key),
+ this.loadMissionNamesTranslations(key)];
if(missionPath) {
promises.push(this.loadMissionTranslation(missionPath, key));
}
@@ -114,6 +138,7 @@ class UtageInfo {
this.translationsInner[this.currentTranslation] = success;
resolve();
}, (failure) => {
+ console.log(failure);
resolve();
});
}
@@ -130,6 +155,24 @@ class UtageInfo {
this.charTranslationsInner[this.currentTranslation] = success;
resolve();
}, (failure) => {
+ console.log(failure);
+ resolve();
+ });
+ }
+ });
+ }
+
+ loadMissionNamesTranslations() {
+ return new Promise((resolve, reject) => {
+ if(this.missionTranslationsInner[this.currentTranslation]) {
+ resolve();
+ } else {
+ commonFunctions.getFileJson(`${utage.rootDirectory}Js/Translations/XduMissionsNames_${this.currentTranslation}.json`)
+ .then((success) => {
+ this.missionTranslationsInner[this.currentTranslation] = success;
+ resolve();
+ }, (failure) => {
+ console.log(failure);
resolve();
});
}
diff --git a/Player.html b/Player.html
index d009ba9..9ea148a 100644
--- a/Player.html
+++ b/Player.html
@@ -20,6 +20,7 @@
Loading Page Data...
+
Now Playing: None
🔊
@@ -36,8 +37,9 @@
Title Text
Diva Text
-
-
- test
- test
-
-
+
+
+ test
+ test
+
+