diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..3c6bd60
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1 @@
+Js/Pixi.min.js
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..840546d
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,20 @@
+{
+ "env": {
+ "browser": true,
+ "es6": true
+ },
+ "extends": "eslint:recommended",
+ "globals": {
+ "Atomics": "readonly",
+ "SharedArrayBuffer": "readonly"
+ },
+ "parserOptions": {
+ "ecmaVersion": 2018,
+ "sourceType": "module"
+ },
+ "rules": {
+ "no-console": "off",
+ "no-unused-vars": [2, { "argsIgnorePattern": "^(success|event|resource|delta|reject)$"}],
+ "no-empty": ["error", { "allowEmptyCatch": true }]
+ }
+}
diff --git a/Js/Audio.js b/Js/Audio.js
index bb1c33b..6891a09 100644
--- a/Js/Audio.js
+++ b/Js/Audio.js
@@ -1,5 +1,7 @@
//(Math.exp(x)-1)/(Math.E-1)
+import bgmLoopData from './BgmLoop.json';
+
class bufferLoader {
constructor(context, soundMap, callback) {
this.context = context;
@@ -94,8 +96,8 @@ class audioController {
source.buffer = this.loader.bufferList[sound];
source.loop = false;
if(type === "bgm") {
- if(this.utage.bgmLoopData[this.utage.soundInfo[sound].origFileName]) {
- let loop = this.utage.bgmLoopData[this.utage.soundInfo[sound].origFileName];
+ if(bgmLoopData[this.utage.soundInfo[sound].origFileName]) {
+ let loop = bgmLoopData[this.utage.soundInfo[sound].origFileName];
source.loopStart = loop["loop_start"]["seconds"];
source.loopEnd = loop["loop_end"]["seconds"];
source.loop = true;
@@ -182,3 +184,5 @@ class audioController {
this.sources = {};
}
}
+
+export { audioController };
diff --git a/Js/Common.js b/Js/Common.js
index 4f0cb8e..9f639e4 100644
--- a/Js/Common.js
+++ b/Js/Common.js
@@ -334,8 +334,10 @@ class commonFunctions {
if(props[i] == " ") { break; }
retval.color += props[i];
}
- retval.color = retval.color;
+ //retval.color = retval.color;
}
return retval;
}
-}
\ No newline at end of file
+}
+
+export { rootUrl, baseDimensions, screenRatio, commonFunctions };
diff --git a/Js/Main.js b/Js/Main.js
index bcd45b2..05a4e86 100644
--- a/Js/Main.js
+++ b/Js/Main.js
@@ -1,5 +1,17 @@
'use strict';
+/* global PIXI */
+import 'Pixi';
+import { Player } from './Player.js';
+import { audioController } from './Audio.js';
+import { baseDimensions, commonFunctions } from './Common.js';
+import { UtageInfo } from './UtageParse.js';
+import { TextFunctions } from './TextFunctions.js';
+import { Shaders } from './Shaders.js';
+
+import '../Css/generic.min.css';
+import '../Css/main.css';
+
const pixiApp = {
app: new PIXI.Application(baseDimensions),
loader: PIXI.loader
@@ -215,9 +227,9 @@ function missionDropDownChanged(event) {
${chapterSelect}
-
+
MstId: ${mis.MstId}
-
+
`;
document.getElementById("click-catcher").style.cssText = 'display: flex;';
@@ -424,7 +436,7 @@ function openHelpModal(event) {
YameteTomete Discord
All Symphogear content belongs to its respective owners
`;
@@ -500,3 +512,22 @@ function onWindowResize(event, delay = 400) {
document.getElementById('app-container').style.cssText = `width: ${res.width}px; height: ${res.height}px;`;
}, delay);
}
+
+export {
+ onBodyLoaded,
+ onBodyKey,
+ toggleMute,
+ onVolumeChange,
+ missionDropDownChanged,
+ languageChanged,
+ toggleFullscreen,
+ onMainClick,
+ openHelpModal,
+ playFromQuery,
+ skipClicked,
+ hideUiClicked,
+ dialogScrollUp,
+ dialogScrollDown,
+ closeMissionModal,
+ missionChanged
+};
diff --git a/Js/Player.js b/Js/Player.js
index 5f24332..a425125 100644
--- a/Js/Player.js
+++ b/Js/Player.js
@@ -1,5 +1,9 @@
'use strict';
+/* global PIXI */
+import 'Pixi';
+import { baseDimensions, commonFunctions } from './Common.js';
+
class Player {
constructor(pixi, utage, text, audio, shaderscript) {
this.pixi = pixi;
@@ -7,7 +11,7 @@ class Player {
this.utage = utage;
this.text = text;
this.audio = audio;
- this.shaders = shaders;
+ this.shaders = shaderscript;
//consts
this.resolutionScale = 1; //I created this thinking that I would need to handle changing offset when resolution changes. But lucikly I can just scale the parent container and it works without needing this.
this.baseFps = 60; //I am assuming that PIXI is going to stay as keeping 60fps = delta1.
@@ -51,9 +55,9 @@ class Player {
return new Promise((resolve, reject) => {
let toLoadBgm = {};
let toLoadSe = {};
- for(let i = 0; i < utage.currentPlayingFile.length; ++i) {
+ for(let i = 0; i < this.utage.currentPlayingFile.length; ++i) {
try {
- let c = utage.currentPlayingFile[i];
+ let c = this.utage.currentPlayingFile[i];
if(c.comment) { continue; }
//They use this to set the sprite set for a charater but have an alternate name displayed
if(c.Arg2 && c.Arg2.toLowerCase().includes("") {
- this.text.characterName(true, utage.charTranslations[cur.Arg1] || cur.Arg1);
+ this.text.characterName(true, this.utage.charTranslations[cur.Arg1] || cur.Arg1);
this.text.dialogText(true, commonFunctions.convertUtageTextTags(text));
} else {
- let charName = "";
let found = false;
//Look for the character that is saying the text to get their name
//future note: This might be better to just look for the character in character info if this start failing.
@@ -1216,7 +1219,7 @@ class Player {
if(cur.Character) {
nameToUse = cur.Arg1;
}
- this.text.characterName(true, utage.charTranslations[nameToUse] || nameToUse);
+ this.text.characterName(true, this.utage.charTranslations[nameToUse] || nameToUse);
this.text.dialogText(true, text);
this.currentCharacters[c].sprite.tint = 0xFFFFFF;
found = true;
@@ -1229,14 +1232,14 @@ class Player {
}
//If we didnt find the character just dump the text anyways with Arg1 as the name
if(!found) {
- this.text.characterName(true, utage.charTranslations[cur.Arg1] || cur.Arg1);
+ this.text.characterName(true, this.utage.charTranslations[cur.Arg1] || cur.Arg1);
this.text.dialogText(true, text);
}
}
this.manualNext = true;
//Sometimes they don't give a Arg1 for the text.
} else if(!cur.Command && cur.Arg2.toLowerCase() === "" && cur.Text) {
- let text = cur.English ? (utage.translations[cur.English] || cur.Text) : cur.Text;
+ let text = cur.English ? (this.utage.translations[cur.English] || cur.Text) : cur.Text;
this.text.characterName(true, "");
this.text.dialogText(true, commonFunctions.convertUtageTextTags(text));
this.manualNext = true;
@@ -1324,6 +1327,7 @@ class Player {
this.lerpTargets.push({type: 'scale.y', object: curChar.sprite, curTime: 0 - (props.delay || 0), time: props.time,
finalV: curChar.sprite.scale.y * props.y, initV: curChar.sprite.scale.y });
}
+ break;
}
case "colorto": {
let props = commonFunctions.getPropertiesFromTweenCommand(cur.Arg3);
@@ -1347,6 +1351,7 @@ class Player {
curChar.sprite.tint = color.color;
}
}
+ break;
}
}
}
@@ -1485,8 +1490,8 @@ class Player {
}
getNextCommand() {
- let command = utage.currentPlayingFile.pop();
- if(!utage.currentPlayingFile || utage.currentPlayingFile.length === 0) {
+ let command = this.utage.currentPlayingFile.pop();
+ if(!this.utage.currentPlayingFile || this.utage.currentPlayingFile.length === 0) {
this.onEndFile();
return;
}
@@ -1514,7 +1519,7 @@ class Player {
return new Promise((resolve, reject) => {
try {
this.pixi.app.ticker.remove(this.onPixiTick, this);
- utage.currentPlayingFile.length = 0;
+ this.utage.currentPlayingFile.length = 0;
this.currentCharacters = {};
this.layers = {};
this.currentCommand = undefined;
@@ -1548,4 +1553,6 @@ class Player {
}
});
}
-}
\ No newline at end of file
+}
+
+export { Player };
diff --git a/Js/Shaders.js b/Js/Shaders.js
index 676dd0e..95372ad 100644
--- a/Js/Shaders.js
+++ b/Js/Shaders.js
@@ -1,4 +1,9 @@
//http://glslsandbox.com/e#39992.0
+
+/* global PIXI */
+import 'Pixi';
+import { baseDimensions } from './Common.js';
+
class Shaders {
constructor() {
this.leftToRightFadeShader = `
@@ -199,4 +204,6 @@ class Shaders {
filterManager.applyFilter(this, input, output);
}
}
-}
\ No newline at end of file
+}
+
+export { Shaders };
diff --git a/Js/TextFunctions.js b/Js/TextFunctions.js
index 853df36..4c7df82 100644
--- a/Js/TextFunctions.js
+++ b/Js/TextFunctions.js
@@ -84,7 +84,6 @@ class TextFunctions {
function putText() {
// skip over any HTML chars
this.dialogToDisplay.curPos = this.typeHtmlChars(this.dialogToDisplay.text, this.dialogToDisplay.curPos);
- let substr = this.dialogToDisplay.text.substr(this.dialogToDisplay.curPos);
if (this.dialogToDisplay.curPos === this.dialogToDisplay.text.length) {
this.showNextIndicator(true);
this.scrollingText = false;
@@ -191,4 +190,6 @@ class TextFunctions {
this.scrollingText = false;
this.lineHeight = -1;
}
-}
\ No newline at end of file
+}
+
+export { TextFunctions };
diff --git a/Js/UtageParse.js b/Js/UtageParse.js
index 927a6d8..3a11ac9 100644
--- a/Js/UtageParse.js
+++ b/Js/UtageParse.js
@@ -1,6 +1,8 @@
//http://madnesslabo.net/utage/?page_id=4448&lang=en
'use strict';
+import { commonFunctions } from './Common.js';
+
class UtageInfo {
constructor() {
this.currentPlayingFile = [];
@@ -31,15 +33,15 @@ class UtageInfo {
//commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Scenario.tsv`),
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Sound.tsv`), //4
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Texture.tsv`), //5
- commonFunctions.getFileJson(`${this.rootDirectory}Js/BgmLoop.json`), //6
- commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduMissionsCustom.json`), //7
- commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomCharacter.tsv`), //8
- commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomSound.tsv`), //9
- commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomTexture.tsv`), //10
+ //commonFunctions.getFileJson(`${this.rootDirectory}Js/BgmLoop.json`),
+ commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduMissionsCustom.json`), //6
+ commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomCharacter.tsv`), //7
+ commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomSound.tsv`), //8
+ commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomTexture.tsv`), //9
];
Promise.all(promises)
.then((success) => {
- this.groupMissions(success[0], success[7]);
+ this.groupMissions(success[0], success[6]);
this.missionsList = Object.keys(this.groupedMissions).map((k) => {
return {Name: this.groupedMissions[k].Name, MstId: this.groupedMissions[k].MstId};
});
@@ -50,10 +52,10 @@ class UtageInfo {
//this.parseParamInfo(success[4]);
this.parseSoundInfo(success[4]);
this.parseTextureInfo(success[5]);
- this.bgmLoopData = success[6];
- this.parseCharacterInfo(success[8], true);
- this.parseSoundInfo(success[9], true);
- this.parseTextureInfo(success[10], true);
+ //this.bgmLoopData = success[6];
+ this.parseCharacterInfo(success[7], true);
+ this.parseSoundInfo(success[8], true);
+ this.parseTextureInfo(success[9], true);
resolve();
}, (failure) => {
reject(failure);
@@ -173,7 +175,7 @@ class UtageInfo {
if(this.charTranslationsInner[this.currentTranslation]) {
resolve();
} else {
- commonFunctions.getFileJson(`${utage.rootDirectory}Js/Translations/nametranslations_${this.currentTranslation}.json`)
+ commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/nametranslations_${this.currentTranslation}.json`)
.then((success) => {
this.charTranslationsInner[this.currentTranslation] = success;
resolve();
@@ -191,8 +193,8 @@ class UtageInfo {
resolve();
} else {
var promises = [
- commonFunctions.getFileJson(`${utage.rootDirectory}Js/Translations/XduMissionsNames_${this.currentTranslation}.json`),
- commonFunctions.getFileJson(`${utage.rootDirectory}Js/Translations/XduMissionsNamesCustom_${this.currentTranslation}.json`)
+ commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduMissionsNames_${this.currentTranslation}.json`),
+ commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduMissionsNamesCustom_${this.currentTranslation}.json`)
];
Promise.all(promises)
.then((success) => {
@@ -362,4 +364,6 @@ class UtageInfo {
resetTranslations() {
this.translationsInner = {};
}
-}
\ No newline at end of file
+}
+
+export { UtageInfo };
diff --git a/Player.html b/Player.html
index 7561fb8..250ae1b 100644
--- a/Player.html
+++ b/Player.html
@@ -5,19 +5,19 @@
-
-
+
-
+
-
+
Loading Utage Data...
Loading Page Data...
@@ -26,33 +26,33 @@
Now Playing: None
- 🔊
-
+ 🔊
+
-
-
-
?
+
+
+
?
-
+
-
➕
+
➕

-
+
Title Text
Diva Text

@@ -64,7 +64,7 @@
-
+