Merge branch 'master' into release
This commit is contained in:
commit
e1f09c35b9
1
.gitignore
vendored
1
.gitignore
vendored
@ -2,6 +2,7 @@
|
|||||||
/
|
/
|
||||||
web.config
|
web.config
|
||||||
/Js/Typed
|
/Js/Typed
|
||||||
|
/Js/[Pp]ixi.js
|
||||||
/node_modules
|
/node_modules
|
||||||
/Js/XduPlayer.js
|
/Js/XduPlayer.js
|
||||||
/Js/XduPlayer.min.js.map
|
/Js/XduPlayer.min.js.map
|
||||||
|
@ -64,7 +64,7 @@ body { margin: 0; }
|
|||||||
|
|
||||||
#parent-container { display: flex; flex-direction: column; align-items: center; }
|
#parent-container { display: flex; flex-direction: column; align-items: center; }
|
||||||
|
|
||||||
#text-container { position: absolute; margin: auto; height: 750px; width: 1334px; font-family: 'FOT-RodinNTLGPro'; }
|
#text-container { color: white; position: absolute; margin: auto; height: 750px; width: 1334px; font-family: 'FOT-RodinNTLGPro'; }
|
||||||
|
|
||||||
#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; }
|
#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; }
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ body { margin: 0; }
|
|||||||
|
|
||||||
#text-container #main-ui-img { width: 100%; height:100%; transition: opacity 0.1s; }
|
#text-container #main-ui-img { width: 100%; height:100%; transition: opacity 0.1s; }
|
||||||
|
|
||||||
#dialog-box { color: white; font-weight: bold; text-shadow: 1px 1px 6px black; transition: opacity 0.1s; }
|
#dialog-box { font-weight: bold; text-shadow: 1px 1px 6px black; transition: opacity 0.1s; }
|
||||||
|
|
||||||
#dialog-box #character { position: absolute; left: 70px; font-size: 30px; cursor: default; user-select: none; }
|
#dialog-box #character { position: absolute; left: 70px; font-size: 30px; cursor: default; user-select: none; }
|
||||||
|
|
||||||
|
@ -90,7 +90,7 @@ class audioController {
|
|||||||
if(!this.loader.bufferList[sound]) {
|
if(!this.loader.bufferList[sound]) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let source = this.audioCtx.createBufferSource()
|
let source = this.audioCtx.createBufferSource();
|
||||||
this.sources[sound] = source;
|
this.sources[sound] = source;
|
||||||
source.buffer = this.loader.bufferList[sound];
|
source.buffer = this.loader.bufferList[sound];
|
||||||
source.loop = false;
|
source.loop = false;
|
||||||
|
27
Js/Common.js
27
Js/Common.js
@ -158,11 +158,12 @@ class commonFunctions {
|
|||||||
let color = '';
|
let color = '';
|
||||||
name = name.substring(1);
|
name = name.substring(1);
|
||||||
if(name.length === 8) {
|
if(name.length === 8) {
|
||||||
color = name.slice(0, 6);
|
color = parseInt(name.slice(0, 6), 16);
|
||||||
alpha = name.slice(6, 8);
|
alpha = parseInt(name.slice(6, 8), 16) / 255;
|
||||||
|
} else {
|
||||||
|
color = parseInt(name, 16);
|
||||||
|
alpha = 1;
|
||||||
}
|
}
|
||||||
color = parseInt(color, 16);
|
|
||||||
alpha = parseInt(alpha, 16) / 255;
|
|
||||||
return { color, alpha };
|
return { color, alpha };
|
||||||
} else {
|
} else {
|
||||||
switch(name.toLowerCase()) {
|
switch(name.toLowerCase()) {
|
||||||
@ -184,6 +185,15 @@ class commonFunctions {
|
|||||||
return [r/255, g/255, b/255];
|
return [r/255, g/255, b/255];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static componentToHex(c) {
|
||||||
|
var hex = parseInt(c).toString(16);
|
||||||
|
return hex.length == 1 ? "0" + hex : hex;
|
||||||
|
}
|
||||||
|
|
||||||
|
static rgbToHex(rgb) {
|
||||||
|
return `#${this.componentToHex(rgb[0] * 255)}${this.componentToHex(rgb[1]* 255)}${this.componentToHex(rgb[2]* 255)}`;
|
||||||
|
}
|
||||||
|
|
||||||
static convertUtageTextTags(text) {
|
static convertUtageTextTags(text) {
|
||||||
text = text.replace(/<speed.*?>|<\/speed>/g, "");
|
text = text.replace(/<speed.*?>|<\/speed>/g, "");
|
||||||
text = text.replace(/\\n/g, "<br/>")
|
text = text.replace(/\\n/g, "<br/>")
|
||||||
@ -317,6 +327,15 @@ class commonFunctions {
|
|||||||
}
|
}
|
||||||
retval.speed = Number(retval.speed);
|
retval.speed = Number(retval.speed);
|
||||||
}
|
}
|
||||||
|
let indexC = props.indexOf("color=");
|
||||||
|
if(indexC !== -1) {
|
||||||
|
retval.color = "";
|
||||||
|
for(let i = indexC + 6; i < props.length; ++i) {
|
||||||
|
if(props[i] == " ") { break; }
|
||||||
|
retval.color += props[i];
|
||||||
|
}
|
||||||
|
retval.color = retval.color;
|
||||||
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
}
|
}
|
13
Js/Main.js
13
Js/Main.js
@ -26,7 +26,7 @@ let screenSizeTimeout = undefined;
|
|||||||
let isMuted = false;
|
let isMuted = false;
|
||||||
let volume = 0.5;
|
let volume = 0.5;
|
||||||
let prevMission = '{Select}';
|
let prevMission = '{Select}';
|
||||||
const availableMstIds = [202070, 202013];
|
const availableMstIds = [202070, 202013, 338001, 338002, 338003, 338004]//[202070, 202013, 338001, 338002, 338003, 338004, 338005, 338006, 338007, 338009, 338010, 338011];
|
||||||
|
|
||||||
function onBodyLoaded() {
|
function onBodyLoaded() {
|
||||||
bodyLoaded = true;
|
bodyLoaded = true;
|
||||||
@ -269,7 +269,10 @@ function languageChanged(event) {
|
|||||||
if(currentMission) {
|
if(currentMission) {
|
||||||
missionPath = `${utage.rootDirectory}Js/Translations/Missions/${currentMission.Path.replace('Asset/Utage/', '').replace('Scenario/', '').replace('.utage', '').replace('.tsv', `_translations_${selectedLang}.json`)}`;
|
missionPath = `${utage.rootDirectory}Js/Translations/Missions/${currentMission.Path.replace('Asset/Utage/', '').replace('Scenario/', '').replace('.utage', '').replace('.tsv', `_translations_${selectedLang}.json`)}`;
|
||||||
}
|
}
|
||||||
utage.setTranslationLanguage(selectedLang, missionPath);
|
utage.setTranslationLanguage(selectedLang, missionPath)
|
||||||
|
.then((success) => {
|
||||||
|
buildMissionSelectList();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkMissionList(missions, currentvalue) {
|
function checkMissionList(missions, currentvalue) {
|
||||||
@ -330,7 +333,11 @@ function dialogScrollDown(event) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function onBodyKey(event) {
|
function onBodyKey(event) {
|
||||||
if(event.code.toLowerCase() === "space") {
|
if(event.code.toLowerCase() === "arrowdown") {
|
||||||
|
dialogScrollDown(event)
|
||||||
|
} else if(event.code.toLowerCase() === "arrowup") {
|
||||||
|
dialogScrollUp(event);
|
||||||
|
} else if(event.code.toLowerCase() === "space") {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
event.stopPropagation();
|
event.stopPropagation();
|
||||||
player.onMainClick(event);
|
player.onMainClick(event);
|
||||||
|
30
Js/Pixi.min.js
vendored
30
Js/Pixi.min.js
vendored
File diff suppressed because one or more lines are too long
343
Js/Player.js
343
Js/Player.js
@ -18,7 +18,6 @@ class Player {
|
|||||||
|
|
||||||
this.currentCharacters = {};
|
this.currentCharacters = {};
|
||||||
this.layers = {};
|
this.layers = {};
|
||||||
this.sprites = {};
|
|
||||||
this.currentCommand = undefined;
|
this.currentCommand = undefined;
|
||||||
this.runEvent = false;
|
this.runEvent = false;
|
||||||
this.secondTicker = 1000;
|
this.secondTicker = 1000;
|
||||||
@ -138,6 +137,13 @@ class Player {
|
|||||||
this.loader.add(`char|${c.Arg1}|${Arg2}`, this.utage.characterInfo[c.Arg1][Arg2].FileName);
|
this.loader.add(`char|${c.Arg1}|${Arg2}`, this.utage.characterInfo[c.Arg1][Arg2].FileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(this.utage.soundInfo["se_変身演出"]) {
|
||||||
|
if(!toLoadSe["se_変身演出"]) {
|
||||||
|
toLoadSe["se_変身演出"] = this.utage.soundInfo["se_変身演出"];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(`Failed to get Henshin SE: se_変身演出`);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "henshin01": {
|
case "henshin01": {
|
||||||
@ -157,33 +163,113 @@ class Player {
|
|||||||
} else {
|
} else {
|
||||||
console.log(`Failed to get BGM: ${c.Arg4}`);
|
console.log(`Failed to get BGM: ${c.Arg4}`);
|
||||||
}
|
}
|
||||||
|
if(this.utage.soundInfo["se_変身演出"]) {
|
||||||
|
if(!toLoadSe["se_変身演出"]) {
|
||||||
|
toLoadSe["se_変身演出"] = this.utage.soundInfo["se_変身演出"];
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
console.log(`Failed to get Henshin SE: se_変身演出`);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
case "somethingnew_appearance01":
|
||||||
|
case "unhappyseed_appearance01":
|
||||||
|
case "unhappyseed_appearance02":
|
||||||
case "arcanoise_appearance02":
|
case "arcanoise_appearance02":
|
||||||
case "arcanoise_appearance03": {
|
case "arcanoise_appearance03":
|
||||||
let Pat = this.defaultCharPattern;
|
case "darkaura01": {
|
||||||
|
switch(c.Command ? c.Command.toLowerCase() : '') {
|
||||||
|
case "somethingnew_appearance01":
|
||||||
|
if(this.utage.soundInfo['Se_サムシング・ニューの叫び声(アアア”ア”ア”)']) {
|
||||||
|
toLoadSe['Se_サムシング・ニューの叫び声(アアア”ア”ア”)'] = this.utage.soundInfo['Se_サムシング・ニューの叫び声(アアア”ア”ア”)'];
|
||||||
|
} else {
|
||||||
|
console.log(`Failed to get somethingnew_appearance01 SE: Se_サムシング・ニューの叫び声(アアア”ア”ア”)`);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "darkaura01":
|
||||||
|
case "unhappyseed_appearance02":
|
||||||
|
case "unhappyseed_appearance01":
|
||||||
|
if(this.utage.soundInfo['Se_不幸のオーラ(ヴォォオンン)']) {
|
||||||
|
toLoadSe['Se_不幸のオーラ(ヴォォオンン)'] = this.utage.soundInfo['Se_不幸のオーラ(ヴォォオンン)'];
|
||||||
|
} else {
|
||||||
|
console.log(`Failed to get unhappyseed_appearance SE: Se_不幸のオーラ(ヴォォオンン)`);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
let pat = this.defaultCharPattern;
|
||||||
if(c.Arg1) {
|
if(c.Arg1) {
|
||||||
if(this.utage.characterInfo[c.Arg1] && this.utage.characterInfo[c.Arg1][Pat]) {
|
if(this.utage.characterInfo[c.Arg1] && this.utage.characterInfo[c.Arg1][pat]) {
|
||||||
if(!this.loader.resources[`char|${c.Arg1}|${Pat}`]) {
|
if(!this.loader.resources[`char|${c.Arg1}|${pat}`]) {
|
||||||
this.loader.add(`char|${c.Arg1}|${Pat}`, this.utage.characterInfo[c.Arg1][Pat].FileName);
|
this.loader.add(`char|${c.Arg1}|${pat}`, this.utage.characterInfo[c.Arg1][pat].FileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(c.Arg2) {
|
if(c.Arg2) {
|
||||||
if(this.utage.characterInfo[c.Arg2] && this.utage.characterInfo[c.Arg2][Pat]) {
|
if(this.utage.characterInfo[c.Arg2] && this.utage.characterInfo[c.Arg2][pat]) {
|
||||||
if(!this.loader.resources[`char|${c.Arg2}|${Pat}`]) {
|
if(!this.loader.resources[`char|${c.Arg2}|${pat}`]) {
|
||||||
this.loader.add(`char|${c.Arg2}|${Pat}`, this.utage.characterInfo[c.Arg2][Pat].FileName);
|
this.loader.add(`char|${c.Arg2}|${pat}`, this.utage.characterInfo[c.Arg2][pat].FileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(c.Arg3) {
|
if(c.Arg3) {
|
||||||
if(this.utage.characterInfo[c.Arg3] && this.utage.characterInfo[c.Arg3][Pat]) {
|
if(this.utage.characterInfo[c.Arg3] && this.utage.characterInfo[c.Arg3][pat]) {
|
||||||
if(!this.loader.resources[`char|${c.Arg3}|${Pat}`]) {
|
if(!this.loader.resources[`char|${c.Arg3}|${pat}`]) {
|
||||||
this.loader.add(`char|${c.Arg3}|${Pat}`, this.utage.characterInfo[c.Arg3][Pat].FileName);
|
this.loader.add(`char|${c.Arg3}|${pat}`, this.utage.characterInfo[c.Arg3][pat].FileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
case "scenetitle01":
|
||||||
|
//this isint in the texture file.
|
||||||
|
this.loader.add('bg|titlecard', `${this.utage.rootDirectory}XDUData/Sample/Texture/BG/bg_title.jpg`);
|
||||||
|
break;
|
||||||
|
case "scenetitle13":
|
||||||
|
this.loader.add('bg|titlecard', `${this.utage.rootDirectory}XDUData/Sample/Texture/BG/event0010.png`);
|
||||||
|
break;
|
||||||
|
case "attachit02":
|
||||||
|
case "attachit03":
|
||||||
|
if(this.utage.soundInfo['se_打撃音(大)']) {
|
||||||
|
toLoadSe['se_打撃音(大)'] = this.utage.soundInfo['se_打撃音(大)'];
|
||||||
|
} else {
|
||||||
|
console.log(`Failed to get attachit SE: se_打撃音(大)`);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "attacshot02":
|
||||||
|
if(this.utage.soundInfo['se_銃撃(単発)']) {
|
||||||
|
toLoadSe['se_銃撃(単発)'] = this.utage.soundInfo['se_銃撃(単発)'];
|
||||||
|
} else {
|
||||||
|
console.log(`Failed to get attacshot SE: se_ガトリング音`);
|
||||||
|
}
|
||||||
|
case "attacshot11":
|
||||||
|
case "attacshot12":
|
||||||
|
if(this.utage.soundInfo['se_ガトリング音']) {
|
||||||
|
toLoadSe['se_ガトリング音'] = this.utage.soundInfo['se_ガトリング音'];
|
||||||
|
} else {
|
||||||
|
console.log(`Failed to get attacshot SE: se_ガトリング音`);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "attacslash01":
|
||||||
|
case "attacslash02":
|
||||||
|
case "attacslash03":
|
||||||
|
case "attacslash04":
|
||||||
|
case "attacslash05":
|
||||||
|
if(this.utage.soundInfo['se_斬撃音']) {
|
||||||
|
toLoadSe['se_斬撃音'] = this.utage.soundInfo['se_斬撃音'];
|
||||||
|
} else {
|
||||||
|
console.log(`Failed to get attacslash SE: se_斬撃音`);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "attaclaser01":
|
||||||
|
if(this.utage.soundInfo['se_レーザーが放たれる音']) {
|
||||||
|
toLoadSe['se_レーザーが放たれる音'] = this.utage.soundInfo['se_レーザーが放たれる音'];
|
||||||
|
} else {
|
||||||
|
console.log(`Failed to get attaclaser SE: se_レーザーが放たれる音`);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "":
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
@ -202,8 +288,6 @@ class Player {
|
|||||||
});
|
});
|
||||||
//Manually load white bg for fading. Can be tinted to change color.
|
//Manually load white bg for fading. Can be tinted to change color.
|
||||||
this.loader.add('bg|whiteFade', `${this.utage.rootDirectory}Images/white.png`);
|
this.loader.add('bg|whiteFade', `${this.utage.rootDirectory}Images/white.png`);
|
||||||
//this isint in the texture file.
|
|
||||||
this.loader.add('bg|titlecard', `${this.utage.rootDirectory}XDUData/Sample/Texture/BG/bg_title.jpg`)
|
|
||||||
this.loader
|
this.loader
|
||||||
.on("progress", (loader, resource) => {
|
.on("progress", (loader, resource) => {
|
||||||
this.onPixiProgress(loader, resource);
|
this.onPixiProgress(loader, resource);
|
||||||
@ -348,17 +432,11 @@ class Player {
|
|||||||
if(pos >= 1) {
|
if(pos >= 1) {
|
||||||
pos = 1;
|
pos = 1;
|
||||||
toRemove.push(i);
|
toRemove.push(i);
|
||||||
if(l.post) {
|
let postRes = postLerpAction(l)
|
||||||
let split = l.post.split('|');
|
if(postRes === "continue") {
|
||||||
switch(split[0].toLowerCase()) {
|
|
||||||
case "destroy":
|
|
||||||
l.object.destroy();
|
|
||||||
continue;
|
continue;
|
||||||
case "clearshader":
|
} else if(postRes === "break") {
|
||||||
l.object.filters = null;
|
false;
|
||||||
l.object.alpha = Number(split[1]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
switch(l.type) {
|
switch(l.type) {
|
||||||
@ -391,6 +469,18 @@ class Player {
|
|||||||
l.object.filters[0].uniforms.time = pos;
|
l.object.filters[0].uniforms.time = pos;
|
||||||
l.object.filters[0].apply();
|
l.object.filters[0].apply();
|
||||||
} catch(error) {}
|
} catch(error) {}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "tint": {
|
||||||
|
let lRgb = commonFunctions.hexToRgb(l.initV);
|
||||||
|
let fRgb = commonFunctions.hexToRgb(l.finalV);
|
||||||
|
let newR = commonFunctions.lerp(lRgb[0], fRgb[0], pos, inter);
|
||||||
|
let newG = commonFunctions.lerp(lRgb[1], fRgb[1], pos, inter);
|
||||||
|
let newB = commonFunctions.lerp(lRgb[2], fRgb[2], pos, inter);
|
||||||
|
let hexValue = commonFunctions.rgbToHex([newR, newG, newB]);
|
||||||
|
let newValue = commonFunctions.getColorFromName(hexValue).color;
|
||||||
|
l.object.tint = newValue;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
let newValue = commonFunctions.lerp(l.initV, l.finalV, pos, inter);
|
let newValue = commonFunctions.lerp(l.initV, l.finalV, pos, inter);
|
||||||
@ -412,6 +502,7 @@ class Player {
|
|||||||
} catch(error) {
|
} catch(error) {
|
||||||
//If we got an exception during this it probably means the object doesnt exist anymore so just remove it.
|
//If we got an exception during this it probably means the object doesnt exist anymore so just remove it.
|
||||||
toRemove.push(i);
|
toRemove.push(i);
|
||||||
|
postLerpAction(this.lerpTargets[i]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for(let i = toRemove.length - 1; i > -1; --i) {
|
for(let i = toRemove.length - 1; i > -1; --i) {
|
||||||
@ -420,6 +511,24 @@ class Player {
|
|||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log(error);
|
console.log(error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function postLerpAction(postLerp) {
|
||||||
|
try {
|
||||||
|
if(!postLerp || !postLerp.object || !postLerp.post) {
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
let split = postLerp.post.split('|');
|
||||||
|
switch(split[0].toLowerCase()) {
|
||||||
|
case "destroy":
|
||||||
|
postLerp.object.destroy({children: true});
|
||||||
|
return 'continue';
|
||||||
|
case "clearshader":
|
||||||
|
postLerp.object.filters = null;
|
||||||
|
postLerp.object.alpha = Number(split[1]);
|
||||||
|
return 'break';
|
||||||
|
}
|
||||||
|
} catch(error) { }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//Processes a line from the mission tsv
|
//Processes a line from the mission tsv
|
||||||
@ -430,8 +539,11 @@ class Player {
|
|||||||
if(cur.Arg2 === '<Off>') {
|
if(cur.Arg2 === '<Off>') {
|
||||||
cur.Arg2 = '<off>';
|
cur.Arg2 = '<off>';
|
||||||
}
|
}
|
||||||
|
if ((cur.Command || "").toLowerCase().includes('scenetitle')) {
|
||||||
|
cur.Command = 'scenetitle';
|
||||||
|
}
|
||||||
switch((cur.Command || "").toLowerCase()) {
|
switch((cur.Command || "").toLowerCase()) {
|
||||||
case "scenetitle01": {
|
case "scenetitle": {
|
||||||
this.waitTime = this.titleWaitTime * 1000;
|
this.waitTime = this.titleWaitTime * 1000;
|
||||||
try {
|
try {
|
||||||
let container = this.layers[this.bgLayerName].container;
|
let container = this.layers[this.bgLayerName].container;
|
||||||
@ -447,9 +559,6 @@ class Player {
|
|||||||
let text = cur.English ? (utage.translations[cur.English] || cur.Text) : cur.Text;
|
let text = cur.English ? (utage.translations[cur.English] || cur.Text) : cur.Text;
|
||||||
this.text.titleText(true, text);
|
this.text.titleText(true, text);
|
||||||
break;
|
break;
|
||||||
}
|
|
||||||
case "scenetitle13": {
|
|
||||||
|
|
||||||
}
|
}
|
||||||
case "divaeffect": {
|
case "divaeffect": {
|
||||||
this.waitTime = Number(cur.Arg5) * 1000;
|
this.waitTime = Number(cur.Arg5) * 1000;
|
||||||
@ -536,7 +645,7 @@ class Player {
|
|||||||
} else {
|
} else {
|
||||||
//clear the sprite for the bg currently in use.
|
//clear the sprite for the bg currently in use.
|
||||||
for(let i = 0; i < container.children.length; ++i) {
|
for(let i = 0; i < container.children.length; ++i) {
|
||||||
container.children[i].destroy();
|
container.children[i].destroy({children: true});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
container.visible = true;
|
container.visible = true;
|
||||||
@ -610,8 +719,12 @@ class Player {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "characteroff": {
|
case "characteroff": {
|
||||||
|
if(cur.Text) {
|
||||||
|
checkPutText(cur);
|
||||||
|
} else {
|
||||||
this.text.dialogText(false, "");
|
this.text.dialogText(false, "");
|
||||||
this.text.characterName(false, "");
|
this.text.characterName(false, "");
|
||||||
|
}
|
||||||
for(let c of Object.keys(this.currentCharacters)) {
|
for(let c of Object.keys(this.currentCharacters)) {
|
||||||
if(!this.currentCharacters[c]) { continue; }
|
if(!this.currentCharacters[c]) { continue; }
|
||||||
let curChar = this.currentCharacters[c];
|
let curChar = this.currentCharacters[c];
|
||||||
@ -623,6 +736,7 @@ class Player {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
case "tween":
|
case "tween":
|
||||||
this.processTween(delta, cur);
|
this.processTween(delta, cur);
|
||||||
@ -652,44 +766,93 @@ class Player {
|
|||||||
break;
|
break;
|
||||||
//custom effects
|
//custom effects
|
||||||
case "henshin01_bgmoff": //101000111
|
case "henshin01_bgmoff": //101000111
|
||||||
this.waitTime = 1000;
|
this.waitTime = 3850;
|
||||||
this.audio.stopSound('bgm');
|
this.audio.stopSound('bgm');
|
||||||
this.checkPutCharacterScreen(cur, true);
|
this.checkPutCharacterScreen(cur, true);
|
||||||
|
this.audio.playSound('se_変身演出', 'Se');
|
||||||
break;
|
break;
|
||||||
case "henshin01":
|
case "henshin01":
|
||||||
this.waitTime = 1000;
|
this.waitTime = 3850;
|
||||||
this.audio.stopSound('bgm');
|
this.audio.stopSound('bgm');
|
||||||
if(this.utage.soundInfo[cur.Arg4]) {
|
if(this.utage.soundInfo[cur.Arg4]) {
|
||||||
this.audio.playSound(cur.Arg4, 'bgm');
|
this.audio.playSound(cur.Arg4, 'bgm');
|
||||||
}
|
}
|
||||||
|
this.audio.playSound('se_変身演出', 'Se');
|
||||||
cur.Arg4 = 0;
|
cur.Arg4 = 0;
|
||||||
this.checkPutCharacterScreen(cur, true);
|
this.checkPutCharacterScreen(cur, true);
|
||||||
break;
|
break;
|
||||||
case "attachit02": //103500221
|
case "attachit02": //103500221
|
||||||
|
this.waitTime = 850;
|
||||||
|
this.audio.playSound('se_打撃音(大)', 'Se');
|
||||||
break;
|
break;
|
||||||
case "attachit03":
|
case "attachit03": //312000112
|
||||||
|
this.waitTime = 850;
|
||||||
|
this.audio.playSound('se_打撃音(大)', 'Se');
|
||||||
break;
|
break;
|
||||||
case "attacshot12": //103500231
|
case "attacshot02":
|
||||||
break;
|
this.waitTime = 1500;
|
||||||
case "attacslash01": //103500642
|
this.audio.playSound('se_銃撃(単発)', 'Se');
|
||||||
break;
|
|
||||||
case "attacslash02": //103500231
|
|
||||||
break;
|
|
||||||
case "attacslash05": //103500552
|
|
||||||
break;
|
break;
|
||||||
case "attacshot11": //103500251
|
case "attacshot11": //103500251
|
||||||
|
this.waitTime = 1680;
|
||||||
|
this.audio.playSound('se_ガトリング音', 'Se');
|
||||||
|
break;
|
||||||
|
case "attacshot12": //103500231
|
||||||
|
this.waitTime = 1680;
|
||||||
|
this.audio.playSound('se_ガトリング音', 'Se');
|
||||||
|
break;
|
||||||
|
case "attacslash01": //103500642
|
||||||
|
this.waitTime = 870;
|
||||||
|
this.audio.playSound('se_斬撃音', 'Se');
|
||||||
|
break;
|
||||||
|
case "attacslash02": //103500231
|
||||||
|
this.waitTime = 870;
|
||||||
|
this.audio.playSound('se_斬撃音', 'Se');
|
||||||
|
break;
|
||||||
|
case "attacslash03": //312000112
|
||||||
|
this.waitTime = 870;
|
||||||
|
this.audio.playSound('se_斬撃音', 'Se');
|
||||||
|
break;
|
||||||
|
case "attacslash04": //312000142
|
||||||
|
this.waitTime = 870;
|
||||||
|
this.audio.playSound('se_斬撃音', 'Se');
|
||||||
|
break;
|
||||||
|
case "attacslash05": //103500552
|
||||||
|
this.waitTime = 870;
|
||||||
|
this.audio.playSound('se_斬撃音', 'Se');
|
||||||
|
break;
|
||||||
|
case "attaclaser01": //312000222
|
||||||
|
this.waitTime = 2360;
|
||||||
|
this.audio.playSound('se_レーザーが放たれる音', 'Se');
|
||||||
break;
|
break;
|
||||||
case "getitem01": //103400252
|
case "getitem01": //103400252
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "skillmovie": //103500341
|
case "skillmovie": //103500341
|
||||||
break;
|
break;
|
||||||
|
case "unhappyseed_appearance01": { //312000112
|
||||||
|
this.audio.stopSound('Se_不幸のオーラ(ヴォォオンン)');
|
||||||
|
this.audio.playSound('Se_不幸のオーラ(ヴォォオンン)', 'Se');
|
||||||
|
this.waitTime = 2000;
|
||||||
|
let customCommand = { Command: "", Arg1: cur.Arg1, Arg2: this.defaultCharPattern, Arg3: 'キャラ中央', Arg6: .5 };
|
||||||
|
this.checkPutCharacterScreen(customCommand, false);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "unhappyseed_appearance02": //312000111
|
||||||
case "arcanoise_appearance02": { //103500341
|
case "arcanoise_appearance02": { //103500341
|
||||||
if(cur.Arg1 && cur.Arg2) {
|
let spawnTime = 0.5;
|
||||||
|
if(cur.Command.toLowerCase().includes("unhappyseed_appearance")) {
|
||||||
|
this.audio.stopSound('Se_不幸のオーラ(ヴォォオンン)');
|
||||||
|
this.audio.playSound('Se_不幸のオーラ(ヴォォオンン)', 'Se');
|
||||||
|
this.waitTime = 3000;
|
||||||
|
spawnTime = 2.5;
|
||||||
|
} else {
|
||||||
this.waitTime = 1000;
|
this.waitTime = 1000;
|
||||||
let customCommand1 = { Command: "", Arg1: cur.Arg1, Arg2: this.defaultCharPattern, Arg3: 'キャラ右', Arg6: .5 };
|
}
|
||||||
|
if(cur.Arg1 && cur.Arg2) {
|
||||||
|
|
||||||
|
let customCommand1 = { Command: "", Arg1: cur.Arg1, Arg2: this.defaultCharPattern, Arg3: 'キャラ右', Arg6: spawnTime };
|
||||||
this.checkPutCharacterScreen(customCommand1, false);
|
this.checkPutCharacterScreen(customCommand1, false);
|
||||||
let customCommand2 = { Command: "", Arg1: cur.Arg2, Arg2: this.defaultCharPattern, Arg3: 'キャラ左', Arg6: .5 };
|
let customCommand2 = { Command: "", Arg1: cur.Arg2, Arg2: this.defaultCharPattern, Arg3: 'キャラ左', Arg6: spawnTime };
|
||||||
this.checkPutCharacterScreen(customCommand2, false);
|
this.checkPutCharacterScreen(customCommand2, false);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -724,7 +887,6 @@ class Player {
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case "noise_disappearance03": { //103500552
|
case "noise_disappearance03": { //103500552
|
||||||
debugger;
|
|
||||||
this.waitTime = Number(cur.Arg1) * 1000;
|
this.waitTime = Number(cur.Arg1) * 1000;
|
||||||
let c1 = this.currentCharacters['キャラ右'] || this.currentCharacters['キャラ右02'];
|
let c1 = this.currentCharacters['キャラ右'] || this.currentCharacters['キャラ右02'];
|
||||||
if(c1) {
|
if(c1) {
|
||||||
@ -745,6 +907,33 @@ class Player {
|
|||||||
case "noise_disappearance11": //103500341
|
case "noise_disappearance11": //103500341
|
||||||
this.waitTime = Number(cur.Arg1) * 1000;
|
this.waitTime = Number(cur.Arg1) * 1000;
|
||||||
break;
|
break;
|
||||||
|
case "enemy_disappearance01": //312000112
|
||||||
|
case "enemy_disappearance02": //312000111
|
||||||
|
case "enemy_disappearance03": //312000142
|
||||||
|
this.processTryRemoveChar(cur.Arg1);
|
||||||
|
if(cur.Arg2) {
|
||||||
|
this.processTryRemoveChar(cur.Arg2);
|
||||||
|
}
|
||||||
|
if(cur.Arg3) {
|
||||||
|
this.processTryRemoveChar(cur.Arg3);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case "darkaura01": //312000111
|
||||||
|
this.audio.stopSound('Se_不幸のオーラ(ヴォォオンン)');
|
||||||
|
this.audio.playSound('Se_不幸のオーラ(ヴォォオンン)', 'Se');
|
||||||
|
this.waitTime = 2500;
|
||||||
|
break;
|
||||||
|
case "somethingnew_appearance01": { //312000111
|
||||||
|
this.audio.playSound('Se_サムシング・ニューの叫び声(アアア”ア”ア”)', 'Se');
|
||||||
|
let c = this.currentCharacters['キャラ中央'];
|
||||||
|
this.waitTime = 4000;
|
||||||
|
if(c) {
|
||||||
|
this.lerpTargets.push({type: 'alpha', object: c.sprite, curTime: 0, time: 3000, finalV: 0, initV: 1, post: "destroy" });
|
||||||
|
}
|
||||||
|
let customCommand = { Command: "", Arg1: cur.Arg1, Arg2: this.defaultCharPattern, Arg3: 'キャラ中央', Arg6: 3 };
|
||||||
|
this.checkPutCharacterScreen(customCommand, false, true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case "continue01":
|
case "continue01":
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -799,13 +988,16 @@ class Player {
|
|||||||
this.checkPutText(cur);
|
this.checkPutText(cur);
|
||||||
}
|
}
|
||||||
|
|
||||||
//Checks if the current command is trying to put a new character on the screen or not
|
//Checks if the current command is trying to put a new character on the screen or not.
|
||||||
checkPutCharacterScreen(cur, special = false) {
|
//special is used if the command actually has a command param such as Henshin since normal text commands dont.
|
||||||
|
//ignoreCurrent is used for if you are remvoing a current character yourself and don't want this to add another fade out to it such as somethingnew_appearance01.
|
||||||
|
checkPutCharacterScreen(cur, special = false, ignoreCurrent = false,) {
|
||||||
if((!cur.Command || special) && cur.Arg1 && this.utage.characterInfo[cur.Arg1]) {
|
if((!cur.Command || special) && cur.Arg1 && this.utage.characterInfo[cur.Arg1]) {
|
||||||
let lay = undefined;
|
let lay = undefined;
|
||||||
let curChar = undefined; //The character that is currently on screen with the same name as Arg1.
|
let curChar = undefined; //The character that is currently on screen with the same name as Arg1.
|
||||||
let prevChar = undefined; //The character that is already on the layer we are trying to put the new char on.
|
let prevChar = undefined; //The character that is already on the layer we are trying to put the new char on.
|
||||||
//First check if the character is already on screen
|
//First check if the character is already on screen
|
||||||
|
if(!ignoreCurrent) {
|
||||||
for(let c of Object.keys(this.currentCharacters)) {
|
for(let c of Object.keys(this.currentCharacters)) {
|
||||||
if(!this.currentCharacters[c]) { continue; }
|
if(!this.currentCharacters[c]) { continue; }
|
||||||
if(this.currentCharacters[c].charName === cur.Arg1) {
|
if(this.currentCharacters[c].charName === cur.Arg1) {
|
||||||
@ -816,6 +1008,7 @@ class Player {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//Sometimes they don't give a pattern so just assume the default.
|
//Sometimes they don't give a pattern so just assume the default.
|
||||||
if(!cur.Arg2 && !curChar) {
|
if(!cur.Arg2 && !curChar) {
|
||||||
cur.Arg2 = this.defaultCharPattern;
|
cur.Arg2 = this.defaultCharPattern;
|
||||||
@ -859,11 +1052,13 @@ class Player {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(!ignoreCurrent) {
|
||||||
//If the layer already has a different character on it remove it.
|
//If the layer already has a different character on it remove it.
|
||||||
if(prevChar && (prevChar.charName !== cur.Arg1 || prevChar.character.Pattern !== chr.Pattern)) {
|
if(prevChar && (prevChar.charName !== cur.Arg1 || prevChar.character.Pattern !== chr.Pattern)) {
|
||||||
this.lerpTargets.push({type: 'alpha', object: prevChar.sprite, curTime: 0, time: 200, finalV: 0, initV: 1, post: "destroy" });
|
this.lerpTargets.push({type: 'alpha', object: prevChar.sprite, curTime: 0, time: 200, finalV: 0, initV: 1, post: "destroy" });
|
||||||
this.currentCharacters[cur.Arg3] = undefined;
|
this.currentCharacters[cur.Arg3] = undefined;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let sprite = new PIXI.Sprite(this.loader.resources[`char|${cur.Arg1}|${cur.Arg2}`].texture);
|
let sprite = new PIXI.Sprite(this.loader.resources[`char|${cur.Arg1}|${cur.Arg2}`].texture);
|
||||||
sprite.scale.set(Number(chr.Scale), Number(chr.Scale));
|
sprite.scale.set(Number(chr.Scale), Number(chr.Scale));
|
||||||
@ -872,7 +1067,7 @@ class Player {
|
|||||||
sprite.alpha = 0;
|
sprite.alpha = 0;
|
||||||
let fadeTime = 200;
|
let fadeTime = 200;
|
||||||
//If the character is already on screen put the new sprite in the same position as the old one.
|
//If the character is already on screen put the new sprite in the same position as the old one.
|
||||||
if(curChar) {
|
if(curChar && curChar.layer.info.LayerName === cur.Arg3) {
|
||||||
sprite.position.x = curChar.sprite.position.x;
|
sprite.position.x = curChar.sprite.position.x;
|
||||||
sprite.position.y = curChar.sprite.position.y;
|
sprite.position.y = curChar.sprite.position.y;
|
||||||
//if the current character is doing a tween transfer the tween to the new one.
|
//if the current character is doing a tween transfer the tween to the new one.
|
||||||
@ -930,6 +1125,21 @@ class Player {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
processTryRemoveChar(character) {
|
||||||
|
let curChar = undefined;
|
||||||
|
for(let c of Object.keys(this.currentCharacters)) {
|
||||||
|
if(!this.currentCharacters[c]) { continue; }
|
||||||
|
if(this.currentCharacters[c].charName === character) {
|
||||||
|
curChar = this.currentCharacters[c];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!curChar) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
this.lerpTargets.push({type: 'alpha', object: curChar.sprite, curTime: 0, time: 500, finalV: 0, initV: 1, post: "destroy" });
|
||||||
|
this.currentCharacters[curChar.layer.info.LayerName] = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
//Checks if the current command is trying to put text on the screen.
|
//Checks if the current command is trying to put text on the screen.
|
||||||
checkPutText(cur) {
|
checkPutText(cur) {
|
||||||
if(this.playingVoice) {
|
if(this.playingVoice) {
|
||||||
@ -1062,13 +1272,24 @@ class Player {
|
|||||||
case "colorto": {
|
case "colorto": {
|
||||||
let props = commonFunctions.getPropertiesFromTweenCommand(cur.Arg3);
|
let props = commonFunctions.getPropertiesFromTweenCommand(cur.Arg3);
|
||||||
if(props.alpha != undefined) {
|
if(props.alpha != undefined) {
|
||||||
|
this.cancelLerpOfType('alpha', curChar.sprite);
|
||||||
if(props.time) {
|
if(props.time) {
|
||||||
this.lerpTargets.push({type: 'alpha', object: curChar.sprite, curTime: 0 - (props.delay || 0), time: props.time,
|
this.lerpTargets.push({type: 'alpha', object: curChar.sprite, curTime: 0 - (props.delay || 0), time: props.time,
|
||||||
finalV: props.alpha, initV: curChar.sprite.alpha });
|
finalV: props.alpha, initV: curChar.sprite.alpha });
|
||||||
} else {
|
} else {
|
||||||
curChar.sprite.alpha = props.alpha;
|
curChar.sprite.alpha = props.alpha;
|
||||||
}
|
}
|
||||||
this.cancelLerpOfType('alpha', curChar.sprite);
|
|
||||||
|
}
|
||||||
|
if(props.color != undefined) {
|
||||||
|
this.cancelLerpOfType('tint', curChar.sprite);
|
||||||
|
let color = commonFunctions.getColorFromName(props.color);
|
||||||
|
if(props.time) {
|
||||||
|
this.lerpTargets.push({type: 'tint', object: curChar.sprite, curTime: 0 - (props.delay || 0), time: props.time,
|
||||||
|
finalV: color.color, initV: curChar.sprite.tint });
|
||||||
|
} else {
|
||||||
|
curChar.sprite.tint = color.color;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1163,11 +1384,11 @@ class Player {
|
|||||||
|
|
||||||
processEndCommand(delta) {
|
processEndCommand(delta) {
|
||||||
let cur = this.currentCommand;
|
let cur = this.currentCommand;
|
||||||
switch(cur.Command) {
|
switch((cur.Command || "").toLowerCase()) {
|
||||||
case "SceneTitle01":
|
case "scenetitle":
|
||||||
this.text.titleText(false, '');
|
this.text.titleText(false, '');
|
||||||
break;
|
break;
|
||||||
case "DivaEffect":
|
case "divaeffect":
|
||||||
this.text.divaText(false, '');
|
this.text.divaText(false, '');
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -1231,17 +1452,9 @@ class Player {
|
|||||||
return new Promise((resolve, reject) => {
|
return new Promise((resolve, reject) => {
|
||||||
try {
|
try {
|
||||||
this.pixi.app.ticker.remove(this.onPixiTick, this);
|
this.pixi.app.ticker.remove(this.onPixiTick, this);
|
||||||
this.pixi.app.stage.children.forEach(function(child) { child.destroy(true, true, true); });
|
|
||||||
for(let tex of Object.keys(PIXI.utils.TextureCache)) {
|
|
||||||
if(PIXI.utils.TextureCache[tex]) {
|
|
||||||
PIXI.utils.TextureCache[tex].destroy(true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
utage.currentPlayingFile.length = 0;
|
utage.currentPlayingFile.length = 0;
|
||||||
this.loader.reset();
|
|
||||||
this.currentCharacters = {};
|
this.currentCharacters = {};
|
||||||
this.layers = {};
|
this.layers = {};
|
||||||
this.sprites = {};
|
|
||||||
this.currentCommand = undefined;
|
this.currentCommand = undefined;
|
||||||
this.runEvent = false;
|
this.runEvent = false;
|
||||||
this.secondTicker = 1000;
|
this.secondTicker = 1000;
|
||||||
@ -1255,6 +1468,18 @@ class Player {
|
|||||||
this.text.resetAll();
|
this.text.resetAll();
|
||||||
this.audio.resetAll();
|
this.audio.resetAll();
|
||||||
this.utage.resetTranslations();
|
this.utage.resetTranslations();
|
||||||
|
this.pixi.app.stage.children.forEach(function(child) { child.destroy({children: true, texture: true, baseTexture: true}); });
|
||||||
|
for(let tex of Object.keys(PIXI.utils.TextureCache)) {
|
||||||
|
if(PIXI.utils.TextureCache[tex]) {
|
||||||
|
PIXI.utils.TextureCache[tex].destroy(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(let tex of Object.keys(PIXI.utils.BaseTextureCache)) {
|
||||||
|
if(PIXI.utils.BaseTextureCache[tex]) {
|
||||||
|
PIXI.utils.BaseTextureCache[tex].destroy(true);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this.loader.reset();
|
||||||
resolve();
|
resolve();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
reject(error);
|
reject(error);
|
||||||
|
@ -88,6 +88,7 @@ class TextFunctions {
|
|||||||
if (this.dialogToDisplay.curPos === this.dialogToDisplay.text.length) {
|
if (this.dialogToDisplay.curPos === this.dialogToDisplay.text.length) {
|
||||||
this.showNextIndicator(true);
|
this.showNextIndicator(true);
|
||||||
this.scrollingText = false;
|
this.scrollingText = false;
|
||||||
|
this.dialog.scrollTop = 0;
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
this.dialogToDisplay.curPos += 1;
|
this.dialogToDisplay.curPos += 1;
|
||||||
@ -113,7 +114,7 @@ class TextFunctions {
|
|||||||
this.dialogInner.innerHTML = this.dialogToDisplay.fullText;
|
this.dialogInner.innerHTML = this.dialogToDisplay.fullText;
|
||||||
let lHeight = this.lineHeight * 2;
|
let lHeight = this.lineHeight * 2;
|
||||||
if(this.dialogInner.offsetHeight > lHeight + 5) {
|
if(this.dialogInner.offsetHeight > lHeight + 5) {
|
||||||
this.dialog.scrollTop = this.dialogInner.offsetHeight - lHeight;
|
this.dialog.scrollTop = 0//this.dialogInner.offsetHeight - lHeight;
|
||||||
this.showScrollControls(true);
|
this.showScrollControls(true);
|
||||||
}
|
}
|
||||||
this.showNextIndicator(true);
|
this.showNextIndicator(true);
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 33001c747cc5bad3ce398f72058088fad34124be
|
Subproject commit 9785aafc39465a98f1c60b0656133cba3ef44ce6
|
@ -32,10 +32,11 @@ class UtageInfo {
|
|||||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Sound.tsv`),
|
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Sound.tsv`),
|
||||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Texture.tsv`),
|
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Texture.tsv`),
|
||||||
commonFunctions.getFileJson(`${this.rootDirectory}Js/BgmLoop.json`),
|
commonFunctions.getFileJson(`${this.rootDirectory}Js/BgmLoop.json`),
|
||||||
|
commonFunctions.getFileJson(`${this.rootDirectory}Js/XduMissionsCustom.json`),
|
||||||
];
|
];
|
||||||
Promise.all(promises)
|
Promise.all(promises)
|
||||||
.then((success) => {
|
.then((success) => {
|
||||||
this.groupMissions(success[0]);
|
this.groupMissions(success[0], success[8]);
|
||||||
this.missionsList = Object.keys(this.groupedMissions).map((k) => {
|
this.missionsList = Object.keys(this.groupedMissions).map((k) => {
|
||||||
return {Name: this.groupedMissions[k].Name, MstId: this.groupedMissions[k].MstId};
|
return {Name: this.groupedMissions[k].Name, MstId: this.groupedMissions[k].MstId};
|
||||||
});
|
});
|
||||||
@ -81,7 +82,7 @@ class UtageInfo {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
groupMissions(missions) {
|
groupMissions(missions, customMissions) {
|
||||||
for(let key of Object.keys(missions)) {
|
for(let key of Object.keys(missions)) {
|
||||||
let mis = missions[key];
|
let mis = missions[key];
|
||||||
if(!this.groupedMissions[mis.MstId]) {
|
if(!this.groupedMissions[mis.MstId]) {
|
||||||
@ -96,6 +97,20 @@ class UtageInfo {
|
|||||||
this.groupedMissions[mis.MstId].Missions[mis.Id] = { Id: mis.Id, Path: mis.Path };
|
this.groupedMissions[mis.MstId].Missions[mis.Id] = { Id: mis.Id, Path: mis.Path };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for(let key of Object.keys(customMissions)) {
|
||||||
|
let mis = customMissions[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() {
|
get translations() {
|
||||||
@ -167,9 +182,16 @@ class UtageInfo {
|
|||||||
if(this.missionTranslationsInner[this.currentTranslation]) {
|
if(this.missionTranslationsInner[this.currentTranslation]) {
|
||||||
resolve();
|
resolve();
|
||||||
} else {
|
} else {
|
||||||
commonFunctions.getFileJson(`${utage.rootDirectory}Js/Translations/XduMissionsNames_${this.currentTranslation}.json`)
|
var promises = [
|
||||||
|
commonFunctions.getFileJson(`${utage.rootDirectory}Js/Translations/XduMissionsNames_${this.currentTranslation}.json`),
|
||||||
|
commonFunctions.getFileJson(`${utage.rootDirectory}Js/Translations/XduMissionsNamesCustom_${this.currentTranslation}.json`)
|
||||||
|
];
|
||||||
|
Promise.all(promises)
|
||||||
.then((success) => {
|
.then((success) => {
|
||||||
this.missionTranslationsInner[this.currentTranslation] = success;
|
for(let m of Object.keys(success[1])) {
|
||||||
|
success[0][m] = success[1][m];
|
||||||
|
}
|
||||||
|
this.missionTranslationsInner[this.currentTranslation] = success[0];
|
||||||
resolve();
|
resolve();
|
||||||
}, (failure) => {
|
}, (failure) => {
|
||||||
console.log(failure);
|
console.log(failure);
|
||||||
|
226
Js/XduMissionsCustom.json
Normal file
226
Js/XduMissionsCustom.json
Normal file
@ -0,0 +1,226 @@
|
|||||||
|
{
|
||||||
|
"312000111": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000111.tsv.utage",
|
||||||
|
"MstId": 338001,
|
||||||
|
"Id": "312000111",
|
||||||
|
"Name": "EV31-1:黒衣の花嫁",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000112": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000112.tsv.utage",
|
||||||
|
"MstId": 338001,
|
||||||
|
"Id": "312000112",
|
||||||
|
"Name": "EV31-1:黒衣の花嫁",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000121": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000121.tsv.utage",
|
||||||
|
"MstId": 338001,
|
||||||
|
"Id": "312000121",
|
||||||
|
"Name": "EV31-1:黒衣の花嫁",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000122": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000122.tsv.utage",
|
||||||
|
"MstId": 338001,
|
||||||
|
"Id": "312000122",
|
||||||
|
"Name": "EV31-1:黒衣の花嫁",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000131": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000131.tsv.utage",
|
||||||
|
"MstId": 338001,
|
||||||
|
"Id": "312000131",
|
||||||
|
"Name": "EV31-1:黒衣の花嫁",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000132": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000132.tsv.utage",
|
||||||
|
"MstId": 338001,
|
||||||
|
"Id": "312000132",
|
||||||
|
"Name": "EV31-1:黒衣の花嫁",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000141": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000141.tsv.utage",
|
||||||
|
"MstId": 338001,
|
||||||
|
"Id": "312000141",
|
||||||
|
"Name": "EV31-1:黒衣の花嫁",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000142": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000142.tsv.utage",
|
||||||
|
"MstId": 338001,
|
||||||
|
"Id": "312000142",
|
||||||
|
"Name": "EV31-1:黒衣の花嫁",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000211": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000211.tsv.utage",
|
||||||
|
"MstId": 338002,
|
||||||
|
"Id": "312000211",
|
||||||
|
"Name": "EV31-2:純白の光明",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000212": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000212.tsv.utage",
|
||||||
|
"MstId": 338002,
|
||||||
|
"Id": "312000212",
|
||||||
|
"Name": "EV31-2:純白の光明",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000221": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000221.tsv.utage",
|
||||||
|
"MstId": 338002,
|
||||||
|
"Id": "312000221",
|
||||||
|
"Name": "EV31-2:純白の光明",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000222": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000222.tsv.utage",
|
||||||
|
"MstId": 338002,
|
||||||
|
"Id": "312000222",
|
||||||
|
"Name": "EV31-2:純白の光明",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000311": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000311.tsv.utage",
|
||||||
|
"MstId": 338003,
|
||||||
|
"Id": "312000311",
|
||||||
|
"Name": "EV31-3:立ちはだかる黒",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000312": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000312.tsv.utage",
|
||||||
|
"MstId": 338003,
|
||||||
|
"Id": "312000312",
|
||||||
|
"Name": "EV31-3:立ちはだかる黒",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000411": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000411.tsv.utage",
|
||||||
|
"MstId": 338004,
|
||||||
|
"Id": "312000411",
|
||||||
|
"Name": "EV31-4:その身に纏う純白",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000412": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000412.tsv.utage",
|
||||||
|
"MstId": 338004,
|
||||||
|
"Id": "312000412",
|
||||||
|
"Name": "EV31-4:その身に纏う純白",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000421": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000421.tsv.utage",
|
||||||
|
"MstId": 338004,
|
||||||
|
"Id": "312000421",
|
||||||
|
"Name": "EV31-4:その身に纏う純白",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000422": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000422.tsv.utage",
|
||||||
|
"MstId": 338004,
|
||||||
|
"Id": "312000422",
|
||||||
|
"Name": "EV31-4:その身に纏う純白",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000511": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000511.tsv.utage",
|
||||||
|
"MstId": 338005,
|
||||||
|
"Id": "312000511",
|
||||||
|
"Name": "EV31-5:ブルー……。",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000512": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000512.tsv.utage",
|
||||||
|
"MstId": 338005,
|
||||||
|
"Id": "312000512",
|
||||||
|
"Name": "EV31-5:ブルー……。",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000611": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000611.tsv.utage",
|
||||||
|
"MstId": 338006,
|
||||||
|
"Id": "312000611",
|
||||||
|
"Name": "EV31-6:マリッジブルー",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000612": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000612.tsv.utage",
|
||||||
|
"MstId": 338006,
|
||||||
|
"Id": "312000612",
|
||||||
|
"Name": "EV31-6:マリッジブルー",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000711": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000711.tsv.utage",
|
||||||
|
"MstId": 338007,
|
||||||
|
"Id": "312000711",
|
||||||
|
"Name": "EV31-7:ウェディングドレス?",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000712": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000712.tsv.utage",
|
||||||
|
"MstId": 338007,
|
||||||
|
"Id": "312000712",
|
||||||
|
"Name": "EV31-7:ウェディングドレス?",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000811": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000811.tsv.utage",
|
||||||
|
"MstId": 338008,
|
||||||
|
"Id": "312000811",
|
||||||
|
"Name": "EV31-8:幸せを呼び起こせッ!",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000812": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000812.tsv.utage",
|
||||||
|
"MstId": 338008,
|
||||||
|
"Id": "312000812",
|
||||||
|
"Name": "EV31-8:幸せを呼び起こせッ!",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000821": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000821.tsv.utage",
|
||||||
|
"MstId": 338008,
|
||||||
|
"Id": "312000821",
|
||||||
|
"Name": "EV31-8:幸せを呼び起こせッ!",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000822": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000822.tsv.utage",
|
||||||
|
"MstId": 338008,
|
||||||
|
"Id": "312000822",
|
||||||
|
"Name": "EV31-8:幸せを呼び起こせッ!",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000911": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000911.tsv.utage",
|
||||||
|
"MstId": 338009,
|
||||||
|
"Id": "312000911",
|
||||||
|
"Name": "EV31-9:ブライダル戦姫ッ!",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312000912": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312000912.tsv.utage",
|
||||||
|
"MstId": 338009,
|
||||||
|
"Id": "312000912",
|
||||||
|
"Name": "EV31-9:ブライダル戦姫ッ!",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312001011": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312001011.tsv.utage",
|
||||||
|
"MstId": 338010,
|
||||||
|
"Id": "312001011",
|
||||||
|
"Name": "EV31-10:ウェディングドレスッ!",
|
||||||
|
"SummaryText": ""
|
||||||
|
},
|
||||||
|
"312001111": {
|
||||||
|
"Path": "Asset/Utage/event011/Scenario/312001111.tsv.utage",
|
||||||
|
"MstId": 338011,
|
||||||
|
"Id": "312001111",
|
||||||
|
"Name": "EV31-11:ふたりのしあわせ",
|
||||||
|
"SummaryText": ""
|
||||||
|
}
|
||||||
|
}
|
@ -28,7 +28,8 @@ const cssToCopy = [
|
|||||||
];
|
];
|
||||||
const jsonFiles = [
|
const jsonFiles = [
|
||||||
"Js/BgmLoop.json",
|
"Js/BgmLoop.json",
|
||||||
"Js/XduMissions.json"
|
"Js/XduMissions.json",
|
||||||
|
"Js/XduMissionsCustom.json"
|
||||||
];
|
];
|
||||||
const translations = [
|
const translations = [
|
||||||
"Js/Translations/**"
|
"Js/Translations/**"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user