Compare commits
87 Commits
Author | SHA1 | Date | |
---|---|---|---|
62e702b9fa | |||
428ea1d660 | |||
0def56d476 | |||
85f2815b6a | |||
7b43a86b99 | |||
1dc54f8590 | |||
d6ac86ed8c | |||
afd850fbca | |||
bdc076b664 | |||
47e250ba89 | |||
14efed32e3 | |||
90236c665d | |||
89a93407f1 | |||
2ca5a9e704 | |||
c6c9c99c31 | |||
ae90fd1c37 | |||
5ca0935ac6 | |||
0c039b6ed4 | |||
a93978f39d | |||
b6821d4157 | |||
d8a5d4d177 | |||
022250c4c4 | |||
3101868b30 | |||
bb409c45a1 | |||
4716b5e8e8 | |||
9dc0c8f9cf | |||
0d522b55c5 | |||
f289381955 | |||
c1c6cbfd99 | |||
90625d82b6 | |||
5dba520155 | |||
0e9f6f8d70 | |||
8786c54200 | |||
25f7d90951 | |||
526d0a51cc | |||
737b13da42 | |||
269592c3d6 | |||
d4e96c66a8 | |||
effb55871f | |||
77fc6e4d69 | |||
bf11050984 | |||
1d469d4f3e | |||
e3b7233b20 | |||
b9e91f4977 | |||
eec0bb137b | |||
0b3fb01670 | |||
fb9cab573e | |||
f3ddb3e58f | |||
24cbf4b5ad | |||
e098d27964 | |||
dbf530a333 | |||
d233bf77ce | |||
42e37585d6 | |||
9ca49d25cc | |||
01245c4477 | |||
8933ba986a | |||
b98c2d987d | |||
62b22d9f96 | |||
64d452c7db | |||
c350654ca2 | |||
9ca07cca3b | |||
63a21c69d8 | |||
99c7afde04 | |||
61e5aaca02 | |||
cdf61c9d57 | |||
b74cacb148 | |||
82eeacab94 | |||
4c1239ed1a | |||
98a45ad4f9 | |||
56da2097b9 | |||
419c896e64 | |||
03cbf45349 | |||
b31d712782 | |||
6b8cae2c00 | |||
16bec2a1ad | |||
733c576cf2 | |||
36fd987c4d | |||
4e3940fff2 | |||
7f71e0d89b | |||
3a1dc7d640 | |||
30ce95011a | |||
7e8eeffe4d | |||
a4676279f3 | |||
63478f494d | |||
0a56a9b11d | |||
e1f09c35b9 | |||
7a50205cd1 |
1
.eslintignore
Normal file
1
.eslintignore
Normal file
@ -0,0 +1 @@
|
||||
Js/Pixi.min.js
|
29
.eslintrc.json
Normal file
29
.eslintrc.json
Normal file
@ -0,0 +1,29 @@
|
||||
{
|
||||
"env": {
|
||||
"browser": true,
|
||||
"es6": true
|
||||
},
|
||||
"extends": "eslint:recommended",
|
||||
"globals": {
|
||||
"Atomics": "readonly",
|
||||
"SharedArrayBuffer": "readonly",
|
||||
"PIXI": "readonly",
|
||||
"UtageInfo": "readonly",
|
||||
"TextFunctions": "readonly",
|
||||
"Player": "readonly",
|
||||
"Shaders": "readonly",
|
||||
"baseDimensions": "readonly",
|
||||
"commonFunctions": "readonly",
|
||||
"audioController": "readonly"
|
||||
},
|
||||
"parserOptions": {
|
||||
"ecmaVersion": 2018,
|
||||
"sourceType": "module"
|
||||
},
|
||||
"rules": {
|
||||
"no-console": "off",
|
||||
"no-unused-vars": [2, { "vars": "local", "argsIgnorePattern": "^(success|event|resource|delta|reject)$"}],
|
||||
"no-empty": ["error", { "allowEmptyCatch": true }],
|
||||
"no-mixed-spaces-and-tabs": "off"
|
||||
}
|
||||
}
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -3,6 +3,8 @@
|
||||
web.config
|
||||
/Js/Typed
|
||||
/Js/[Pp]ixi.js
|
||||
/Js/[Pp]ixi.js.map
|
||||
/Js/[Pp]ixi.min.js.map
|
||||
/node_modules
|
||||
/Js/XduPlayer.js
|
||||
/Js/XduPlayer.min.js.map
|
||||
@ -10,3 +12,4 @@ web.config
|
||||
/Dist
|
||||
/Css/main.min.css
|
||||
/Js/XduPlayer.min.js
|
||||
/**/.*.swp
|
6
.gitmodules
vendored
6
.gitmodules
vendored
@ -1,4 +1,8 @@
|
||||
[submodule "Js/Translations"]
|
||||
path = Js/Translations
|
||||
url = https://git.poweris.moe/xdutranslations.git
|
||||
url = https://git.poweris.moe/yttt-xdu/xdutranslations.git
|
||||
branch = master
|
||||
[submodule "CustomData"]
|
||||
path = CustomData
|
||||
url = https://git.poweris.moe/yttt-xdu/customdata.git
|
||||
branch = .
|
||||
|
35
CHANGELOG.md
35
CHANGELOG.md
@ -14,4 +14,37 @@ Added null check for pixi sprite calculateverticies because it sometimes makes a
|
||||
DPI is now taken into account when resizing.
|
||||
Added credits to mission modal.
|
||||
Added ability to go fullscreen.
|
||||
Missions JSON moved to translations submodule so missions can be added/enabled without disturbing main project.
|
||||
Missions JSON moved to translations submodule so missions can be added/enabled without disturbing main project.
|
||||
|
||||
## V1.2.1 (2018-12-29)
|
||||
|
||||
Custom asset support
|
||||
Russian language support
|
||||
Fix translation fallback
|
||||
|
||||
## V1.2.2 (2019-01-20)
|
||||
|
||||
Add language url parameter
|
||||
Fix noise\_disappearance commands
|
||||
|
||||
## V1.3.0 (2019-05-13)
|
||||
|
||||
Macro support
|
||||
DivaMovie
|
||||
Changed metadata to include quests
|
||||
Per-language quest enabling
|
||||
Sort scenes into quests to reduce clutter
|
||||
Preserve ColorTo tinting properly
|
||||
urlparam: questSceneMstId
|
||||
|
||||
## V1.3.1 (2019-06-09)
|
||||
|
||||
Fix MoveCamera macro
|
||||
|
||||
## V1.4.0 (2019-09-29)
|
||||
|
||||
Updated Pixi.js to v5
|
||||
|
||||
## V1.5.0 (2020-07-31)
|
||||
|
||||
XDU Global support
|
||||
|
2
Css/generic.min.css
vendored
2
Css/generic.min.css
vendored
@ -1 +1 @@
|
||||
html{font-size:16px;font-family:arial;background-color:#393939;color:rgba(255,255,255,.7)}html body{border-color:rgba(255,255,255,.2)}html body a{color:#0096cf}html body a:not([href]){text-decoration:underline;cursor:pointer}html body .hover-span{color:#0096cf}.fade-in{opacity:0;transition:opacity .5s}
|
||||
html{font-size:16px;font-family:arial;background-color:#393939;color:rgba(255,255,255,.7)}html body{border-color:rgba(255,255,255,.2)}html body a{color:#0096cf}html body a:not([href]){text-decoration:underline;cursor:pointer}html body .hover-span{color:#0096cf}.fade-in{opacity:0;transition:opacity .5s}.centered{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center}
|
46
Css/main.css
46
Css/main.css
@ -35,10 +35,20 @@
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: SourceCodePro-Regular;
|
||||
src: url(../Fonts/SourceCodePro-Regular.woff2) format('woff');
|
||||
font-family: Orbitron-Medium;
|
||||
src: url(../Fonts/Orbitron Medium.woff2) format('woff');
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: PTSans;
|
||||
src: url(../Fonts/PTSans.woff2) format('woff');
|
||||
}
|
||||
|
||||
/*@font-face {
|
||||
font-family: SourceSansVariable-Roman;
|
||||
src: url(../Fonts/SourceSansVariable-Roman.woff2) format('woff');
|
||||
}*/
|
||||
|
||||
@-webkit-keyframes smallbounce {
|
||||
from { transform: translate(0, 5px); }
|
||||
to { transform: translate(0, -5px); }
|
||||
@ -52,22 +62,30 @@
|
||||
to { transform: translate(0, -5px); }
|
||||
}
|
||||
|
||||
body { margin: 0; }
|
||||
html { height: 100%; }
|
||||
|
||||
body { margin: 0; height: 100%; }
|
||||
|
||||
.flex-grow { flex-grow: 1; }
|
||||
|
||||
.centered { position: fixed; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; }
|
||||
|
||||
.hidden { opacity: 0; }
|
||||
|
||||
.shown { opacity: 0; }
|
||||
|
||||
#app-container { position: relative; width: 1334px; height: 750px; display: flex; justify-content: center; align-items: center; }
|
||||
|
||||
#parent-container { display: flex; flex-direction: column; align-items: center; }
|
||||
#parent-container { height: 100%; display: flex; flex-direction: column; align-items: center; }
|
||||
|
||||
#text-container { color: white; position: absolute; margin: auto; height: 750px; width: 1334px; font-family: 'FOT-RodinNTLGPro'; }
|
||||
|
||||
#text-container.eng { font-family: 'FOT-RodinNTLGPro'; }
|
||||
|
||||
#text-container.jpn { font-family: 'FOT-RodinNTLGPro'; }
|
||||
|
||||
#text-container.rus { font-family: 'PTSans'; }
|
||||
|
||||
#text-container.cze { font-family: 'PTSans'; }
|
||||
|
||||
#text-container #fullscreen-button { position: absolute; top: 0.5rem; left: 0.5rem; font-size: 30px; line-height: 30px; opacity: 0.35; z-index: 11; }
|
||||
|
||||
#text-container #title { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); text-align: center; font-size: 20px; transition: opacity 0.3s; cursor: default; user-select: none; }
|
||||
@ -104,11 +122,13 @@ body { margin: 0; }
|
||||
|
||||
#dialog-scroll img { height: 35px; }
|
||||
|
||||
#title-container { margin-bottom: 2px; }
|
||||
#title-container { padding: 2px 0; }
|
||||
|
||||
#other-controls-container { display: flex; width: 550px; justify-content: center; align-items: center; z-index: 10; }
|
||||
#other-controls-container { padding-bottom: 4px; display: flex; width: 100%; justify-content: center; align-items: center; z-index: 10; }
|
||||
|
||||
#select-mission { min-width: 0; }
|
||||
#select-quest { min-width: 0; width: 25% }
|
||||
|
||||
#select-scene { min-width: 0; width: 25% }
|
||||
|
||||
#select-language { margin-left: 10px; }
|
||||
|
||||
@ -138,6 +158,12 @@ body { margin: 0; }
|
||||
|
||||
#modal-buttons { bottom: 0; margin-top: auto; width: 100%; display: flex; justify-content: space-between; min-height: 21px; }
|
||||
|
||||
#mission-modal .follow-links { margin-top: auto; display: flex; flex-direction: column; text-align: center; width:100%; }
|
||||
|
||||
#mission-modal .follow-links .follow-links-header { font-weight: bold; }
|
||||
|
||||
#mission-modal .follow-links .follow-links-links { display: flex; flex-direction: row; justify-content: space-around; margin-top: 5px; }
|
||||
|
||||
@media screen and (max-width: 812px) {
|
||||
#modal-container { top: 0; bottom: 0; left: 0; right: 0; transform: none; }
|
||||
.modal { width: 100%; height: 100%; border-radius: 0; }
|
||||
@ -151,4 +177,4 @@ body { margin: 0; }
|
||||
@media screen and (max-height: 600px) {
|
||||
#mission-modal #mission-detail { display: none; }
|
||||
#mission-modal #mission-icon { display: block; max-height: 20%; margin: 10px 0 10px 0; object-fit: contain; }
|
||||
}
|
||||
}
|
||||
|
1
CustomData
Submodule
1
CustomData
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit e92af8f0d0c0d4246e44dd0b63508f9e460fe3a8
|
@ -1,5 +1,4 @@
|
||||
//(Math.exp(x)-1)/(Math.E-1)
|
||||
//🔊
|
||||
|
||||
class bufferLoader {
|
||||
constructor(context, soundMap, callback) {
|
||||
@ -182,4 +181,4 @@ class audioController {
|
||||
}
|
||||
this.sources = {};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
899
Js/BgmLoop.json
899
Js/BgmLoop.json
@ -1,899 +0,0 @@
|
||||
{
|
||||
"bgm_adv_battle_01": {
|
||||
"duration": 93.01484375,
|
||||
"loop_end": {
|
||||
"samples_48k": 4464640,
|
||||
"samples_native": 2976427,
|
||||
"seconds": 93.01334375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 543504,
|
||||
"samples_native": 362336,
|
||||
"seconds": 11.323
|
||||
}
|
||||
},
|
||||
"bgm_adv_comical_01": {
|
||||
"duration": 57.7235625,
|
||||
"loop_end": {
|
||||
"samples_48k": 2770663,
|
||||
"samples_native": 1847109,
|
||||
"seconds": 57.72215625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 250656,
|
||||
"samples_native": 167104,
|
||||
"seconds": 5.222
|
||||
}
|
||||
},
|
||||
"bgm_adv_emergency_01": {
|
||||
"duration": 98.295,
|
||||
"loop_end": {
|
||||
"samples_48k": 4718094,
|
||||
"samples_native": 3145396,
|
||||
"seconds": 98.293625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1304784,
|
||||
"samples_native": 869856,
|
||||
"seconds": 27.183
|
||||
}
|
||||
},
|
||||
"bgm_adv_everyday_01": {
|
||||
"duration": 75.8483125,
|
||||
"loop_end": {
|
||||
"samples_48k": 3640636,
|
||||
"samples_native": 2427091,
|
||||
"seconds": 75.84659375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 349200,
|
||||
"samples_native": 232800,
|
||||
"seconds": 7.275
|
||||
}
|
||||
},
|
||||
"bgm_adv_everyday_02": {
|
||||
"duration": 70.43615625,
|
||||
"loop_end": {
|
||||
"samples_48k": 3380871,
|
||||
"samples_native": 2253914,
|
||||
"seconds": 70.4348125
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 588144,
|
||||
"samples_native": 392096,
|
||||
"seconds": 12.253
|
||||
}
|
||||
},
|
||||
"bgm_adv_everyday_03": {
|
||||
"duration": 78.99671875,
|
||||
"loop_end": {
|
||||
"samples_48k": 3791752,
|
||||
"samples_native": 2527835,
|
||||
"seconds": 78.99484375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 436416,
|
||||
"samples_native": 290944,
|
||||
"seconds": 9.092
|
||||
}
|
||||
},
|
||||
"bgm_adv_highlight_01": {
|
||||
"duration": 97.1335,
|
||||
"loop_end": {
|
||||
"samples_48k": 4662328,
|
||||
"samples_native": 3108219,
|
||||
"seconds": 97.13184375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 473232,
|
||||
"samples_native": 315488,
|
||||
"seconds": 9.859
|
||||
}
|
||||
},
|
||||
"bgm_adv_highlight_02": {
|
||||
"duration": 76.46521875,
|
||||
"loop_end": {
|
||||
"samples_48k": 3670234,
|
||||
"samples_native": 2446823,
|
||||
"seconds": 76.46321875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 648768,
|
||||
"samples_native": 432512,
|
||||
"seconds": 13.516
|
||||
}
|
||||
},
|
||||
"bgm_adv_highlight_03": {
|
||||
"duration": 109.82465625,
|
||||
"loop_end": {
|
||||
"samples_48k": 5271502,
|
||||
"samples_native": 3514335,
|
||||
"seconds": 109.82296875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1476672,
|
||||
"samples_native": 984448,
|
||||
"seconds": 30.764
|
||||
}
|
||||
},
|
||||
"bgm_adv_peace_01": {
|
||||
"duration": 83.74309375,
|
||||
"loop_end": {
|
||||
"samples_48k": 4019584,
|
||||
"samples_native": 2679723,
|
||||
"seconds": 83.74134375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 541344,
|
||||
"samples_native": 360896,
|
||||
"seconds": 11.278
|
||||
}
|
||||
},
|
||||
"bgm_adv_sorrow_01": {
|
||||
"duration": 75.9431875,
|
||||
"loop_end": {
|
||||
"samples_48k": 3645204,
|
||||
"samples_native": 2430136,
|
||||
"seconds": 75.94175
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 975936,
|
||||
"samples_native": 650624,
|
||||
"seconds": 20.332
|
||||
}
|
||||
},
|
||||
"bgm_adv_tension_01": {
|
||||
"duration": 66.506,
|
||||
"loop_end": {
|
||||
"samples_48k": 3192193,
|
||||
"samples_native": 2128129,
|
||||
"seconds": 66.50403125
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 411504,
|
||||
"samples_native": 274336,
|
||||
"seconds": 8.573
|
||||
}
|
||||
},
|
||||
"bgm_home_01": {
|
||||
"duration": 76.73034375,
|
||||
"loop_end": {
|
||||
"samples_48k": 3682962,
|
||||
"samples_native": 2455308,
|
||||
"seconds": 76.728375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 850176,
|
||||
"samples_native": 566784,
|
||||
"seconds": 17.712
|
||||
}
|
||||
},
|
||||
"bgm_raid_01": {
|
||||
"duration": 111.7009375,
|
||||
"loop_end": {
|
||||
"samples_48k": 5361571,
|
||||
"samples_native": 3574381,
|
||||
"seconds": 111.69940625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1110144,
|
||||
"samples_native": 740096,
|
||||
"seconds": 23.128
|
||||
}
|
||||
},
|
||||
"jingle_gacha": {
|
||||
"duration": 15.652,
|
||||
"loop_end": {
|
||||
"samples_48k": 751200,
|
||||
"samples_native": 500800,
|
||||
"seconds": 15.65
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 290400,
|
||||
"samples_native": 193600,
|
||||
"seconds": 6.05
|
||||
}
|
||||
},
|
||||
"musicBase": {
|
||||
"duration": 86.40134375,
|
||||
"loop_end": {
|
||||
"samples_48k": 4147201,
|
||||
"samples_native": 2764801,
|
||||
"seconds": 86.40003125
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 0,
|
||||
"samples_native": 0,
|
||||
"seconds": 0.0
|
||||
}
|
||||
},
|
||||
"music_apple": {
|
||||
"duration": 86.01065625,
|
||||
"loop_end": {
|
||||
"samples_48k": 4128439,
|
||||
"samples_native": 2752293,
|
||||
"seconds": 86.00915625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 0,
|
||||
"samples_native": 0,
|
||||
"seconds": 0.0
|
||||
}
|
||||
},
|
||||
"music_asu_no_gaika": {
|
||||
"duration": 89.30321875,
|
||||
"loop_end": {
|
||||
"samples_48k": 4286482,
|
||||
"samples_native": 2857655,
|
||||
"seconds": 89.30171875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 961632,
|
||||
"samples_native": 641088,
|
||||
"seconds": 20.034
|
||||
}
|
||||
},
|
||||
"music_beyond_the_blade": {
|
||||
"duration": 107.07978125,
|
||||
"loop_end": {
|
||||
"samples_48k": 5139739,
|
||||
"samples_native": 3426493,
|
||||
"seconds": 107.07790625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1172256,
|
||||
"samples_native": 781504,
|
||||
"seconds": 24.422
|
||||
}
|
||||
},
|
||||
"music_bye_bye_lullaby": {
|
||||
"duration": 77.39109375,
|
||||
"loop_end": {
|
||||
"samples_48k": 3714693,
|
||||
"samples_native": 2476462,
|
||||
"seconds": 77.3894375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 892320,
|
||||
"samples_native": 594880,
|
||||
"seconds": 18.59
|
||||
}
|
||||
},
|
||||
"music_dangerous_sunshine": {
|
||||
"duration": 99.20853125,
|
||||
"loop_end": {
|
||||
"samples_48k": 4761918,
|
||||
"samples_native": 3174612,
|
||||
"seconds": 99.206625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1238112,
|
||||
"samples_native": 825408,
|
||||
"seconds": 25.794
|
||||
}
|
||||
},
|
||||
"music_dareka_no_tame_no_hikari": {
|
||||
"duration": 108.5063125,
|
||||
"loop_end": {
|
||||
"samples_48k": 5208220,
|
||||
"samples_native": 3472147,
|
||||
"seconds": 108.50459375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 2697264,
|
||||
"samples_native": 1798176,
|
||||
"seconds": 56.193
|
||||
}
|
||||
},
|
||||
"music_edge_works_of_goddess_zababa": {
|
||||
"duration": 91.3029375,
|
||||
"loop_end": {
|
||||
"samples_48k": 4382446,
|
||||
"samples_native": 2921631,
|
||||
"seconds": 91.30096875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1080480,
|
||||
"samples_native": 720320,
|
||||
"seconds": 22.51
|
||||
}
|
||||
},
|
||||
"music_eiai_promise": {
|
||||
"duration": 123.58634375,
|
||||
"loop_end": {
|
||||
"samples_48k": 5932080,
|
||||
"samples_native": 3954720,
|
||||
"seconds": 123.585
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1861680,
|
||||
"samples_native": 1241120,
|
||||
"seconds": 38.785
|
||||
}
|
||||
},
|
||||
"music_first_love_song": {
|
||||
"duration": 104.9476875,
|
||||
"loop_end": {
|
||||
"samples_48k": 5037417,
|
||||
"samples_native": 3358278,
|
||||
"seconds": 104.9461875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 585072,
|
||||
"samples_native": 390048,
|
||||
"seconds": 12.189
|
||||
}
|
||||
},
|
||||
"music_fushichou_no_flamme": {
|
||||
"duration": 129.0045,
|
||||
"loop_end": {
|
||||
"samples_48k": 6192121,
|
||||
"samples_native": 4128081,
|
||||
"seconds": 129.00253125
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 2669376,
|
||||
"samples_native": 1779584,
|
||||
"seconds": 55.612
|
||||
}
|
||||
},
|
||||
"music_gekisou_gungnir": {
|
||||
"duration": 100.545375,
|
||||
"loop_end": {
|
||||
"samples_48k": 4826109,
|
||||
"samples_native": 3217406,
|
||||
"seconds": 100.5439375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1120224,
|
||||
"samples_native": 746816,
|
||||
"seconds": 23.338
|
||||
}
|
||||
},
|
||||
"music_gekisyou_infinity": {
|
||||
"duration": 152.32209375,
|
||||
"loop_end": {
|
||||
"samples_48k": 7311394,
|
||||
"samples_native": 4874263,
|
||||
"seconds": 152.32071875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 3361680,
|
||||
"samples_native": 2241120,
|
||||
"seconds": 70.035
|
||||
}
|
||||
},
|
||||
"music_gekkabijin": {
|
||||
"duration": 99.34246875,
|
||||
"loop_end": {
|
||||
"samples_48k": 4768356,
|
||||
"samples_native": 3178904,
|
||||
"seconds": 99.34075
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1268592,
|
||||
"samples_native": 845728,
|
||||
"seconds": 26.429
|
||||
}
|
||||
},
|
||||
"music_gekkou_no_tsurugi": {
|
||||
"duration": 86.184875,
|
||||
"loop_end": {
|
||||
"samples_48k": 4136785,
|
||||
"samples_native": 2757857,
|
||||
"seconds": 86.18303125
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 833472,
|
||||
"samples_native": 555648,
|
||||
"seconds": 17.364
|
||||
}
|
||||
},
|
||||
"music_genkaitoppa_g_beat": {
|
||||
"duration": 121.08309375,
|
||||
"loop_end": {
|
||||
"samples_48k": 5811907,
|
||||
"samples_native": 3874605,
|
||||
"seconds": 121.08140625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1906128,
|
||||
"samples_native": 1270752,
|
||||
"seconds": 39.711
|
||||
}
|
||||
},
|
||||
"music_genocide_saw": {
|
||||
"duration": 95.9691875,
|
||||
"loop_end": {
|
||||
"samples_48k": 4606449,
|
||||
"samples_native": 3070966,
|
||||
"seconds": 95.9676875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1209408,
|
||||
"samples_native": 806272,
|
||||
"seconds": 25.196
|
||||
}
|
||||
},
|
||||
"music_ginwan_airget_lamh": {
|
||||
"duration": 99.313,
|
||||
"loop_end": {
|
||||
"samples_48k": 4766931,
|
||||
"samples_native": 3177954,
|
||||
"seconds": 99.3110625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1055424,
|
||||
"samples_native": 703616,
|
||||
"seconds": 21.988
|
||||
}
|
||||
},
|
||||
"music_gohoushi_maidmode": {
|
||||
"duration": 95.612125,
|
||||
"loop_end": {
|
||||
"samples_48k": 4589314,
|
||||
"samples_native": 3059543,
|
||||
"seconds": 95.61071875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1287408,
|
||||
"samples_native": 858272,
|
||||
"seconds": 26.821
|
||||
}
|
||||
},
|
||||
"music_gokuren_igalima": {
|
||||
"duration": 80.25296875,
|
||||
"loop_end": {
|
||||
"samples_48k": 3852064,
|
||||
"samples_native": 2568043,
|
||||
"seconds": 80.25134375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 476784,
|
||||
"samples_native": 317856,
|
||||
"seconds": 9.933
|
||||
}
|
||||
},
|
||||
"music_gun_bullet_xxx": {
|
||||
"duration": 83.22640625,
|
||||
"loop_end": {
|
||||
"samples_48k": 3994797,
|
||||
"samples_native": 2663198,
|
||||
"seconds": 83.2249375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 117312,
|
||||
"samples_native": 78208,
|
||||
"seconds": 2.444
|
||||
}
|
||||
},
|
||||
"music_gyakkou_no_flugel": {
|
||||
"duration": 114.43875,
|
||||
"loop_end": {
|
||||
"samples_48k": 5492964,
|
||||
"samples_native": 3661976,
|
||||
"seconds": 114.43675
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1260816,
|
||||
"samples_native": 840544,
|
||||
"seconds": 26.267
|
||||
}
|
||||
},
|
||||
"music_gyakkou_no_resolve": {
|
||||
"duration": 111.3798125,
|
||||
"loop_end": {
|
||||
"samples_48k": 5346163,
|
||||
"samples_native": 3564109,
|
||||
"seconds": 111.37840625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1638576,
|
||||
"samples_native": 1092384,
|
||||
"seconds": 34.137
|
||||
}
|
||||
},
|
||||
"music_hadakaninatte_natsu": {
|
||||
"duration": 85.93515625,
|
||||
"loop_end": {
|
||||
"samples_48k": 4124794,
|
||||
"samples_native": 2749863,
|
||||
"seconds": 85.93321875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 654768,
|
||||
"samples_native": 436512,
|
||||
"seconds": 13.641
|
||||
}
|
||||
},
|
||||
"music_hajimarino_uta": {
|
||||
"duration": 167.56865625,
|
||||
"loop_end": {
|
||||
"samples_48k": 8043231,
|
||||
"samples_native": 5362154,
|
||||
"seconds": 167.5673125
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1400592,
|
||||
"samples_native": 933728,
|
||||
"seconds": 29.179
|
||||
}
|
||||
},
|
||||
"music_hidamari_memoria": {
|
||||
"duration": 107.5283125,
|
||||
"loop_end": {
|
||||
"samples_48k": 5161266,
|
||||
"samples_native": 3440844,
|
||||
"seconds": 107.526375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 861504,
|
||||
"samples_native": 574336,
|
||||
"seconds": 17.948
|
||||
}
|
||||
},
|
||||
"music_kimitoiu_otokanade_tsukirumade": {
|
||||
"duration": 95.7555,
|
||||
"loop_end": {
|
||||
"samples_48k": 4596183,
|
||||
"samples_native": 3064122,
|
||||
"seconds": 95.7538125
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 845616,
|
||||
"samples_native": 563744,
|
||||
"seconds": 17.617
|
||||
}
|
||||
},
|
||||
"music_koi_no_okehazama": {
|
||||
"duration": 76.1594375,
|
||||
"loop_end": {
|
||||
"samples_48k": 3655587,
|
||||
"samples_native": 2437058,
|
||||
"seconds": 76.1580625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 710064,
|
||||
"samples_native": 473376,
|
||||
"seconds": 14.793
|
||||
}
|
||||
},
|
||||
"music_kono_ima_wo_ikite": {
|
||||
"duration": 161.39909375,
|
||||
"loop_end": {
|
||||
"samples_48k": 7747063,
|
||||
"samples_native": 5164709,
|
||||
"seconds": 161.39715625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 939792,
|
||||
"samples_native": 626528,
|
||||
"seconds": 19.579
|
||||
}
|
||||
},
|
||||
"music_kyoushitsu_monochrome": {
|
||||
"duration": 79.831625,
|
||||
"loop_end": {
|
||||
"samples_48k": 3831834,
|
||||
"samples_native": 2554556,
|
||||
"seconds": 79.829875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 489168,
|
||||
"samples_native": 326112,
|
||||
"seconds": 10.191
|
||||
}
|
||||
},
|
||||
"music_makenaiai_ga_kokoniaru": {
|
||||
"duration": 93.74815625,
|
||||
"loop_end": {
|
||||
"samples_48k": 4499835,
|
||||
"samples_native": 2999890,
|
||||
"seconds": 93.7465625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1334880,
|
||||
"samples_native": 889920,
|
||||
"seconds": 27.81
|
||||
}
|
||||
},
|
||||
"music_makyu_ichiibal": {
|
||||
"duration": 81.071375,
|
||||
"loop_end": {
|
||||
"samples_48k": 3891351,
|
||||
"samples_native": 2594234,
|
||||
"seconds": 81.0698125
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 650016,
|
||||
"samples_native": 433344,
|
||||
"seconds": 13.542
|
||||
}
|
||||
},
|
||||
"music_melodious_moonlight": {
|
||||
"duration": 99.05025,
|
||||
"loop_end": {
|
||||
"samples_48k": 4754340,
|
||||
"samples_native": 3169560,
|
||||
"seconds": 99.04875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1230576,
|
||||
"samples_native": 820384,
|
||||
"seconds": 25.637
|
||||
}
|
||||
},
|
||||
"music_nijiiro_no_flugel": {
|
||||
"duration": 112.277,
|
||||
"loop_end": {
|
||||
"samples_48k": 5389231,
|
||||
"samples_native": 3592821,
|
||||
"seconds": 112.27565625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1157088,
|
||||
"samples_native": 771392,
|
||||
"seconds": 24.106
|
||||
}
|
||||
},
|
||||
"music_orbital_beat": {
|
||||
"duration": 74.67153125,
|
||||
"loop_end": {
|
||||
"samples_48k": 3584140,
|
||||
"samples_native": 2389427,
|
||||
"seconds": 74.66959375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1202976,
|
||||
"samples_native": 801984,
|
||||
"seconds": 25.062
|
||||
}
|
||||
},
|
||||
"music_oukyo_sulsagana": {
|
||||
"duration": 100.1548125,
|
||||
"loop_end": {
|
||||
"samples_48k": 4807359,
|
||||
"samples_native": 3204906,
|
||||
"seconds": 100.1533125
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1065168,
|
||||
"samples_native": 710112,
|
||||
"seconds": 22.191
|
||||
}
|
||||
},
|
||||
"music_over_killscythe_hell": {
|
||||
"duration": 91.43084375,
|
||||
"loop_end": {
|
||||
"samples_48k": 4388601,
|
||||
"samples_native": 2925734,
|
||||
"seconds": 91.4291875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1212432,
|
||||
"samples_native": 808288,
|
||||
"seconds": 25.259
|
||||
}
|
||||
},
|
||||
"music_practice_mode": {
|
||||
"duration": 108.994625,
|
||||
"loop_end": {
|
||||
"samples_48k": 5231652,
|
||||
"samples_native": 3487768,
|
||||
"seconds": 108.99275
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1314384,
|
||||
"samples_native": 876256,
|
||||
"seconds": 27.383
|
||||
}
|
||||
},
|
||||
"music_ressou_gungnir": {
|
||||
"duration": 141.42465625,
|
||||
"loop_end": {
|
||||
"samples_48k": 6788316,
|
||||
"samples_native": 4525544,
|
||||
"seconds": 141.42325
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 3042432,
|
||||
"samples_native": 2028288,
|
||||
"seconds": 63.384
|
||||
}
|
||||
},
|
||||
"music_sakura_blizzard": {
|
||||
"duration": 101.234875,
|
||||
"loop_end": {
|
||||
"samples_48k": 4859196,
|
||||
"samples_native": 3239464,
|
||||
"seconds": 101.23325
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1204704,
|
||||
"samples_native": 803136,
|
||||
"seconds": 25.098
|
||||
}
|
||||
},
|
||||
"music_santa_ga_machi_ni_yattekuru": {
|
||||
"duration": 104.1534375,
|
||||
"loop_end": {
|
||||
"samples_48k": 4999269,
|
||||
"samples_native": 3332846,
|
||||
"seconds": 104.1514375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 662304,
|
||||
"samples_native": 441536,
|
||||
"seconds": 13.798
|
||||
}
|
||||
},
|
||||
"music_seigiwoshinjite_nigirishimete": {
|
||||
"duration": 87.9635625,
|
||||
"loop_end": {
|
||||
"samples_48k": 4222179,
|
||||
"samples_native": 2814786,
|
||||
"seconds": 87.9620625
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 382512,
|
||||
"samples_native": 255008,
|
||||
"seconds": 7.969
|
||||
}
|
||||
},
|
||||
"music_seiten_galaxy_cross": {
|
||||
"duration": 126.5226875,
|
||||
"loop_end": {
|
||||
"samples_48k": 6073014,
|
||||
"samples_native": 4048676,
|
||||
"seconds": 126.521125
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1793712,
|
||||
"samples_native": 1195808,
|
||||
"seconds": 37.369
|
||||
}
|
||||
},
|
||||
"music_senkin_daurudabura": {
|
||||
"duration": 110.1046875,
|
||||
"loop_end": {
|
||||
"samples_48k": 5284932,
|
||||
"samples_native": 3523288,
|
||||
"seconds": 110.10275
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1316256,
|
||||
"samples_native": 877504,
|
||||
"seconds": 27.422
|
||||
}
|
||||
},
|
||||
"music_senkin_daurudabura_test01": {
|
||||
"duration": 82.6820625,
|
||||
"loop_end": {
|
||||
"samples_48k": 3968674,
|
||||
"samples_native": 2645783,
|
||||
"seconds": 82.68071875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 0,
|
||||
"samples_native": 0,
|
||||
"seconds": 0.0
|
||||
}
|
||||
},
|
||||
"music_senritsu_sorority": {
|
||||
"duration": 162.176125,
|
||||
"loop_end": {
|
||||
"samples_48k": 7784385,
|
||||
"samples_native": 5189590,
|
||||
"seconds": 162.1746875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 3414720,
|
||||
"samples_native": 2276480,
|
||||
"seconds": 71.14
|
||||
}
|
||||
},
|
||||
"music_shinwasekai_karano_kyousyuu": {
|
||||
"duration": 70.55734375,
|
||||
"loop_end": {
|
||||
"samples_48k": 3386688,
|
||||
"samples_native": 2257792,
|
||||
"seconds": 70.556
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 0,
|
||||
"samples_native": 0,
|
||||
"seconds": 0.0
|
||||
}
|
||||
},
|
||||
"music_sorae": {
|
||||
"duration": 128.56625,
|
||||
"loop_end": {
|
||||
"samples_48k": 6171114,
|
||||
"samples_native": 4114076,
|
||||
"seconds": 128.564875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 2426880,
|
||||
"samples_native": 1617920,
|
||||
"seconds": 50.56
|
||||
}
|
||||
},
|
||||
"music_stand_up_ready": {
|
||||
"duration": 111.54221875,
|
||||
"loop_end": {
|
||||
"samples_48k": 5353941,
|
||||
"samples_native": 3569294,
|
||||
"seconds": 111.5404375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1302960,
|
||||
"samples_native": 868640,
|
||||
"seconds": 27.145
|
||||
}
|
||||
},
|
||||
"music_the_moon_is_a_harsh_mistress": {
|
||||
"duration": 96.8825,
|
||||
"loop_end": {
|
||||
"samples_48k": 4650280,
|
||||
"samples_native": 3100187,
|
||||
"seconds": 96.88084375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1302096,
|
||||
"samples_native": 868064,
|
||||
"seconds": 27.127
|
||||
}
|
||||
},
|
||||
"music_trust_heart": {
|
||||
"duration": 90.5468125,
|
||||
"loop_end": {
|
||||
"samples_48k": 4346170,
|
||||
"samples_native": 2897447,
|
||||
"seconds": 90.54521875
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1176384,
|
||||
"samples_native": 784256,
|
||||
"seconds": 24.508
|
||||
}
|
||||
},
|
||||
"music_waikyou_shenshoujin": {
|
||||
"duration": 117.59053125,
|
||||
"loop_end": {
|
||||
"samples_48k": 5644249,
|
||||
"samples_native": 3762833,
|
||||
"seconds": 117.58853125
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1612608,
|
||||
"samples_native": 1075072,
|
||||
"seconds": 33.596
|
||||
}
|
||||
},
|
||||
"music_watashitoiu_otohibiki_sonosakini": {
|
||||
"duration": 93.04259375,
|
||||
"loop_end": {
|
||||
"samples_48k": 4465980,
|
||||
"samples_native": 2977320,
|
||||
"seconds": 93.04125
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 716208,
|
||||
"samples_native": 477472,
|
||||
"seconds": 14.921
|
||||
}
|
||||
},
|
||||
"music_zettou_amenohabakiri": {
|
||||
"duration": 113.1419375,
|
||||
"loop_end": {
|
||||
"samples_48k": 5430724,
|
||||
"samples_native": 3620483,
|
||||
"seconds": 113.14009375
|
||||
},
|
||||
"loop_start": {
|
||||
"samples_48k": 1179312,
|
||||
"samples_native": 786208,
|
||||
"seconds": 24.569
|
||||
}
|
||||
}
|
||||
}
|
@ -4,6 +4,11 @@ let rootUrl = `${window.location.protocol}//${window.location.host}/`;
|
||||
const baseDimensions = {width: 1334, height: 750};
|
||||
const screenRatio = 9/16;
|
||||
|
||||
const CUSTOM = {
|
||||
custom: 'Custom',
|
||||
stock: 'Stock'
|
||||
}
|
||||
|
||||
class commonFunctions {
|
||||
static getFileText(file) {
|
||||
return new Promise((resolve, reject) => {
|
||||
@ -334,8 +339,7 @@ class commonFunctions {
|
||||
if(props[i] == " ") { break; }
|
||||
retval.color += props[i];
|
||||
}
|
||||
retval.color = retval.color;
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
383
Js/Main.js
383
Js/Main.js
@ -2,7 +2,7 @@
|
||||
|
||||
const pixiApp = {
|
||||
app: new PIXI.Application(baseDimensions),
|
||||
loader: PIXI.loader
|
||||
loader: PIXI.Loader.shared
|
||||
};
|
||||
|
||||
const utage = new UtageInfo();
|
||||
@ -10,16 +10,17 @@ const shaders = new Shaders();
|
||||
const textFunc = new TextFunctions();
|
||||
let audio = undefined; //Cant create a audio context without user input.
|
||||
const player = new Player(pixiApp, utage, textFunc, audio, shaders);
|
||||
const languages = ["eng", "jpn"];
|
||||
const version = "YameteTomete XDUPlayer V1.2.0";
|
||||
const languages = ["eng", "jpn", "rus", "cze", "enm", "kor", "zho"];
|
||||
const version = "YameteTomete XDUPlayer V1.5.0";
|
||||
let bodyLoaded = false;
|
||||
let utageLoaded = false;
|
||||
let languagesLoaded = false;
|
||||
let selectedLang = "eng";
|
||||
let currentMission = undefined;
|
||||
let currentMissionMst = 0;
|
||||
let currentMissionIndex = 0;
|
||||
let currentMissionList = [];
|
||||
let currentScene = {};
|
||||
let currentSceneId = "";
|
||||
let scenePlaylist = [];
|
||||
let currentPart = "";
|
||||
let partPlaylist = [];
|
||||
let urlParams = {};
|
||||
let screenw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
|
||||
let screenh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
|
||||
@ -27,16 +28,22 @@ let screenSizeTimeout = undefined;
|
||||
let isMuted = false;
|
||||
let volume = 0.5;
|
||||
let fullScreen = false;
|
||||
let prevMission = '{Select}';
|
||||
const availableMstIds = [202070, 202071, 202013, 338001, 338002, 338003, 338004]//[202070, 202013, 338001, 338002, 338003, 338004, 338005, 338006, 338007, 338009, 338010, 338011];
|
||||
let prevScene = '{Select}';
|
||||
let prevQuest = '{Select}';
|
||||
|
||||
const emoji = {
|
||||
LoudSound: String.fromCodePoint(0x1f50a),
|
||||
Mute: String.fromCodePoint(0x1f507),
|
||||
HeavyPlusSign: String.fromCodePoint(0x2795)
|
||||
};
|
||||
|
||||
function onBodyLoaded() {
|
||||
bodyLoaded = true;
|
||||
document.getElementById("title-tag").innerText = version;
|
||||
document.addEventListener('webkitfullscreenchange', onFullScreenChange, false);
|
||||
document.addEventListener('mozfullscreenchange', onFullScreenChange, false);
|
||||
document.addEventListener('fullscreenchange', onFullScreenChange, false);
|
||||
document.addEventListener('MSFullscreenChange', onFullScreenChange, false);
|
||||
document.addEventListener('mozfullscreenchange', onFullScreenChange, false);
|
||||
document.addEventListener('fullscreenchange', onFullScreenChange, false);
|
||||
document.addEventListener('MSFullscreenChange', onFullScreenChange, false);
|
||||
}
|
||||
|
||||
(function startLoad() {
|
||||
@ -55,6 +62,7 @@ function onBodyLoaded() {
|
||||
(function checkIsLoaded() {
|
||||
if(bodyLoaded) {
|
||||
document.getElementById('loading-font').style.cssText = "display: none;";
|
||||
checkQueryParameters();
|
||||
loadLocalStorage();
|
||||
}
|
||||
if(utageLoaded && languagesLoaded) {
|
||||
@ -70,7 +78,8 @@ function onBodyLoaded() {
|
||||
|
||||
function onAllLoaded(success) {
|
||||
textFunc.findTextElements();
|
||||
buildMissionSelectList();
|
||||
buildQuestSelectList();
|
||||
buildSceneSelectList();
|
||||
buildLanguageList();
|
||||
let appContainer = document.getElementById('app-container');
|
||||
appContainer.appendChild(pixiApp.app.view);
|
||||
@ -96,15 +105,16 @@ function loadLocalStorage() {
|
||||
audio.mute(isMuted);
|
||||
}
|
||||
if(isMuted) {
|
||||
document.getElementById('mute-button').innerText = "🔇";
|
||||
document.getElementById('mute-button').innerText = emoji.Mute;
|
||||
} else {
|
||||
document.getElementById('mute-button').innerText = "🔊";
|
||||
document.getElementById('mute-button').innerText = emoji.LoudSound;
|
||||
}
|
||||
//language
|
||||
let lang = localStorage.getItem('language') || "eng";
|
||||
let lang = urlParams['lang'] || localStorage.getItem('language') || "eng";
|
||||
if(languages.includes(lang)) {
|
||||
selectedLang = lang;
|
||||
}
|
||||
document.getElementById('text-container').className = selectedLang;
|
||||
utage.setTranslationLanguage(selectedLang, '')
|
||||
.then((success) => {
|
||||
languagesLoaded = true;
|
||||
@ -117,27 +127,79 @@ function loadLocalStorage() {
|
||||
}
|
||||
}
|
||||
|
||||
function buildMissionSelectList() {
|
||||
let selectBox = document.getElementById('select-mission');
|
||||
selectBox.innerHTML = '';
|
||||
for(let i = -1; i < utage.missionsList.length; ++i) {
|
||||
let opt = document.createElement('option');
|
||||
if(i === -1) {
|
||||
function buildQuestSelectList() {
|
||||
let questBox = document.getElementById('select-quest');
|
||||
questBox.innerHTML = '';
|
||||
for (let i = -1; i < utage.questList.length; ++i) {
|
||||
let opt = document.createElement('option')
|
||||
if (i === -1) {
|
||||
opt.setAttribute('value', '{Select}');
|
||||
opt.innerText = 'Select Mission';
|
||||
opt.innerText = 'Select Event';
|
||||
} else {
|
||||
let m = utage.missionsList[i];
|
||||
if(!Object.keys(utage.groupedMissions[m.MstId].Missions).some((mis) => { return utage.groupedMissions[m.MstId].Missions[mis].Enabled === true })) {
|
||||
let q = utage.questList[i];
|
||||
let cust = q.IsCustom ? CUSTOM.custom : CUSTOM.stock;
|
||||
let name = q.Name;
|
||||
let tl_key = utage.questTranslations[cust][q.QuestMstId];
|
||||
if (!tl_key) {
|
||||
console.log("Failed to build quest list: missing translations");
|
||||
continue;
|
||||
}
|
||||
opt.setAttribute('value', m.MstId);
|
||||
let name = m.Name;
|
||||
if(utage.missionTranslations[m.MstId]) {
|
||||
name = utage.missionTranslations[m.MstId].Name || name;
|
||||
if (!tl_key.Enabled && !utage.quests[cust][q.QuestMstId].Scenes.some((s) => { return utage.sceneTranslations[cust][s].Enabled === true })) {
|
||||
continue;
|
||||
}
|
||||
name = tl_key.Name || name;
|
||||
opt.setAttribute('value', `${cust}|${q.QuestMstId}`);
|
||||
opt.innerText = name;
|
||||
}
|
||||
selectBox.appendChild(opt);
|
||||
questBox.appendChild(opt);
|
||||
}
|
||||
}
|
||||
|
||||
function buildSceneSelectList() {
|
||||
let sceneBox = document.getElementById('select-scene');
|
||||
let questBox = document.getElementById('select-quest');
|
||||
sceneBox.innerHTML = '';
|
||||
|
||||
let opt = document.createElement('option');
|
||||
opt.setAttribute('value', '{Select}');
|
||||
opt.innerText = "Select Scene";
|
||||
|
||||
if (questBox.value === '{Select}') {
|
||||
sceneBox.appendChild(opt);
|
||||
sceneBox.setAttribute("disabled", "true");
|
||||
return;
|
||||
} else {
|
||||
sceneBox.removeAttribute("disabled");
|
||||
}
|
||||
|
||||
let cust = questBox.value.split("|")[0];
|
||||
let questMstId = questBox.value.split("|")[1];
|
||||
|
||||
for (let i = -2; i < utage.quests[cust][questMstId].Scenes.length; ++i) {
|
||||
let opt = document.createElement('option');
|
||||
if (i === -2) {
|
||||
opt.setAttribute('value', '{Select}');
|
||||
opt.innerText = 'Select Scene';
|
||||
} else if (i === -1) {
|
||||
opt.setAttribute('value', '{All}');
|
||||
opt.innerText = 'Play All';
|
||||
} else {
|
||||
let questSceneMstId = utage.quests[cust][questMstId].Scenes[i];
|
||||
let s = utage.scenes[cust][questSceneMstId];
|
||||
opt.setAttribute('value', `${cust}|${questSceneMstId}`);
|
||||
let name = s.Name;
|
||||
let tl_key = utage.sceneTranslations[cust][questSceneMstId];
|
||||
if (!tl_key) {
|
||||
console.log("Failed to build scene list: missing translations");
|
||||
continue;
|
||||
}
|
||||
if (!tl_key.Enabled) {
|
||||
continue;
|
||||
}
|
||||
name = tl_key.Name || name;
|
||||
opt.innerText = name;
|
||||
}
|
||||
sceneBox.appendChild(opt);
|
||||
}
|
||||
}
|
||||
|
||||
@ -155,29 +217,85 @@ function buildLanguageList() {
|
||||
|
||||
function checkQueryParameters() {
|
||||
urlParams = commonFunctions.readQueryParameters();
|
||||
if(urlParams['mstid'] && urlParams['id'] && utage.groupedMissions[urlParams['mstid']] && utage.groupedMissions[urlParams['mstid']].Missions[urlParams['id']]) {
|
||||
document.getElementById('play-from-query').style.cssText = "position: fixed; z-index: 15; text-align: center; top: 50%; left: 50%; display: block;";
|
||||
if (languagesLoaded) {
|
||||
let cust;
|
||||
|
||||
if (urlParams['custom'] && urlParams['custom'] === "1") {
|
||||
cust = CUSTOM.custom;
|
||||
} else {
|
||||
cust = CUSTOM.stock;
|
||||
}
|
||||
|
||||
let playable = (urlParams['questscenemstid'] &&
|
||||
utage.scenes[cust][urlParams['questscenemstid']] &&
|
||||
utage.sceneTranslations[cust][urlParams['questscenemstid']] &&
|
||||
utage.sceneTranslations[cust][urlParams['questscenemstid']].Enabled);
|
||||
|
||||
if(playable) {
|
||||
document.getElementById('play-from-query').style.cssText = "position: fixed; z-index: 15; text-align: center; top: 50%; left: 50%; display: block;";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function playFromQuery(event) {
|
||||
missionChanged(urlParams['mstid'], urlParams['id']);
|
||||
let cust;
|
||||
if (urlParams['custom'] && urlParams['custom'] === "1") {
|
||||
cust = CUSTOM.custom;
|
||||
} else {
|
||||
cust = CUSTOM.stock;
|
||||
}
|
||||
sceneSet(urlParams['questscenemstid'], cust);
|
||||
document.getElementById('play-from-query').style.cssText = "display: none;";
|
||||
}
|
||||
|
||||
function missionDropDownChanged(event) {
|
||||
function questDropDownChanged(event) {
|
||||
if(!event || !event.currentTarget || !event.currentTarget.value) { return; }
|
||||
buildSceneSelectList();
|
||||
}
|
||||
|
||||
function sceneDropDownChanged(event) {
|
||||
if(!event || !event.currentTarget || !event.currentTarget.value || event.currentTarget.value === '{Select}') { return; }
|
||||
|
||||
if (event.currentTarget.value === '{All}') {
|
||||
let quest = document.getElementById("select-quest");
|
||||
let cust = quest.value.split("|")[0];
|
||||
let questMstId = quest.value.split("|")[1];
|
||||
let scene = utage.quests[cust][questMstId].Scenes;
|
||||
resetPlaylist();
|
||||
for (const s of scene) {
|
||||
let tl_key = utage.sceneTranslations[cust][s];
|
||||
if (tl_key) {
|
||||
if (utage.sceneTranslations[cust][s].Enabled) {
|
||||
utage.scenes[cust][s]['QuestSceneMstId'] = s;
|
||||
scenePlaylist.push(utage.scenes[cust][s]);
|
||||
}
|
||||
}
|
||||
}
|
||||
playNext();
|
||||
return;
|
||||
}
|
||||
|
||||
let cont = document.getElementById("modal-container");
|
||||
let misId = event.currentTarget.value;
|
||||
let mis = utage.groupedMissions[misId];
|
||||
if(!mis) { console.log(`Mission ${misId} not found`); return; }
|
||||
let name = mis.Name;
|
||||
let summary = mis.SummaryText;
|
||||
|
||||
let cust = event.currentTarget.value.split("|")[0];
|
||||
let questSceneMstId = event.currentTarget.value.split("|")[1];
|
||||
|
||||
let scene = utage.scenes[cust][questSceneMstId];
|
||||
if(!scene) { console.log(`Scene ${questSceneMstId} not found`); return; }
|
||||
|
||||
let name = scene.Name;
|
||||
let summary = scene.SummaryText;
|
||||
let image = questSceneMstId;
|
||||
if ("Image" in scene) {
|
||||
image = scene.Image;
|
||||
}
|
||||
let credits = "";
|
||||
if(utage.missionTranslations[mis.MstId]) {
|
||||
name = utage.missionTranslations[mis.MstId].Name || name;
|
||||
summary = utage.missionTranslations[mis.MstId].SummaryText || summary;
|
||||
credits = utage.missionTranslations[mis.MstId].Credits || credits;
|
||||
let tl_key = utage.sceneTranslations[cust][questSceneMstId];
|
||||
|
||||
if(tl_key) {
|
||||
name = tl_key.Name || name;
|
||||
summary = tl_key.SummaryText || summary;
|
||||
credits = tl_key.Credits || credits;
|
||||
}
|
||||
if(!credits) {
|
||||
if(selectedLang === "eng") {
|
||||
@ -186,19 +304,21 @@ function missionDropDownChanged(event) {
|
||||
credits = "None";
|
||||
}
|
||||
}
|
||||
|
||||
let chapterSelect = '<div><span>Chapter Select:</span><select id="ChapterSelect">';
|
||||
for(let k of Object.keys(mis.Missions)) {
|
||||
var m = mis.Missions[k];
|
||||
if(m.Enabled) {
|
||||
chapterSelect += `<option value="${m.Id}">${m.Id}</option>`
|
||||
}
|
||||
chapterSelect += `<option value="{All}">Play All</option>`
|
||||
for (const p of scene.Parts) {
|
||||
chapterSelect += `<option value="${p}">${p}</option>`
|
||||
}
|
||||
|
||||
let detailSrc = `${utage.rootDirectory}${(scene.IsCustom ? "CustomData" : "XDUData")}/Asset/Image/Quest/Snap/Detail/${image}.png`;
|
||||
let iconSrc = `${utage.rootDirectory}${(scene.IsCustom ? "CustomData" : "XDUData")}/Asset/Image/Quest/Snap/Icon/${image}.png`;
|
||||
chapterSelect += '</select></div>';
|
||||
cont.innerHTML = `
|
||||
<div id="mission-modal" class="modal">
|
||||
<span class="mission-title">${name || 'none'}</span>
|
||||
<img id="mission-detail" src="${utage.rootDirectory}XDUData/Asset/Image/Quest/Snap/Detail/${mis.MstId}.png"/>
|
||||
<img id="mission-icon" src="${utage.rootDirectory}XDUData/Asset/Image/Quest/Snap/Icon/${mis.MstId}.png"/>
|
||||
<img id="mission-detail" src="${detailSrc}"/>
|
||||
<img id="mission-icon" src="${iconSrc}"/>
|
||||
<div id="mission-summary">Summary: ${summary || 'none'}</div>
|
||||
<div class="flex-grow"></div>
|
||||
<div>Credits (${selectedLang}): ${credits}</div>
|
||||
@ -207,8 +327,8 @@ function missionDropDownChanged(event) {
|
||||
</div>
|
||||
<div id="modal-buttons">
|
||||
<button onclick="closeMissionModal(event, false)">Close</button>
|
||||
<span>MstId: ${mis.MstId}</span>
|
||||
<button onclick="missionChanged(${mis.MstId})">Play</button>
|
||||
<span>MstId: ${questSceneMstId}</span>
|
||||
<button onclick="sceneSet('${questSceneMstId}', '${cust}')">Play</button>
|
||||
</div>
|
||||
</div>`;
|
||||
document.getElementById("click-catcher").style.cssText = 'display: flex;';
|
||||
@ -217,10 +337,18 @@ function missionDropDownChanged(event) {
|
||||
|
||||
function closeMissionModal(event, wasStarted) {
|
||||
if(!wasStarted) {
|
||||
document.getElementById('select-mission').value = prevMission;
|
||||
document.getElementById('select-scene').value = prevScene;
|
||||
document.getElementById('select-quest').value = prevQuest;
|
||||
} else {
|
||||
prevMission = document.getElementById('select-mission').value;
|
||||
prevScene = document.getElementById('select-scene').value;
|
||||
prevQuest = document.getElementById('select-quest').value;
|
||||
}
|
||||
if (prevScene === '{Select}') {
|
||||
document.getElementById('select-scene').setAttribute("disabled", "true");
|
||||
} else {
|
||||
document.getElementById('select-scene').removeAttribute("disabled");
|
||||
}
|
||||
|
||||
closeModal(event);
|
||||
}
|
||||
|
||||
@ -231,55 +359,85 @@ function closeModal(event) {
|
||||
cont.innerHTML = '';
|
||||
}
|
||||
|
||||
function missionChanged(mstId, value) {
|
||||
let mst = utage.groupedMissions[mstId];
|
||||
let name = mst.Name;
|
||||
if(utage.missionTranslations[mstId]) {
|
||||
name = utage.missionTranslations[mstId].Name || name;
|
||||
function sceneSet(questSceneMstId, cust) {
|
||||
resetPlaylist();
|
||||
let part = document.getElementById('ChapterSelect');
|
||||
utage.scenes[cust][questSceneMstId]['QuestSceneMstId'] = questSceneMstId;
|
||||
if (!part || part.value === '{All}') {
|
||||
scenePlaylist.push(utage.scenes[cust][questSceneMstId]);
|
||||
} else {
|
||||
currentScene = utage.scenes[cust][questSceneMstId];
|
||||
try {
|
||||
partPlaylist.push.apply(partPlaylist, currentScene.Parts.slice(currentScene.Parts.indexOf(part.value)));
|
||||
} catch (error) {
|
||||
console.log(error);
|
||||
return;
|
||||
}
|
||||
}
|
||||
if(!value) {
|
||||
value = document.getElementById("ChapterSelect").value;
|
||||
|
||||
playNext();
|
||||
}
|
||||
|
||||
function playNext() {
|
||||
if (!partPlaylist.length) {
|
||||
if (!scenePlaylist.length) {
|
||||
resetPlaylist();
|
||||
return; // we're probably done
|
||||
}
|
||||
currentScene = scenePlaylist.shift();
|
||||
partPlaylist = currentScene.Parts.slice();
|
||||
}
|
||||
|
||||
partChanged(partPlaylist.shift());
|
||||
}
|
||||
|
||||
function partChanged(part) {
|
||||
let cust = currentScene.IsCustom ? CUSTOM.custom : CUSTOM.stock;
|
||||
let name = currentScene.Name;
|
||||
let tl_key = utage.sceneTranslations[cust][currentScene.QuestSceneMstId];
|
||||
|
||||
if(tl_key) {
|
||||
name = tl_key.Name || name;
|
||||
}
|
||||
|
||||
if(!audio) {
|
||||
audio = new audioController(utage);
|
||||
audio.changeVolume(volume);
|
||||
audio.mute(isMuted);
|
||||
player.audio = audio;
|
||||
}
|
||||
|
||||
player.resetAll()
|
||||
.then((success) => {
|
||||
let newMission = mst.Missions[value];
|
||||
checkMissionList(mst.Missions, value);
|
||||
currentMission = newMission;
|
||||
currentMissionMst = mstId;
|
||||
if(!currentMission.Enabled) {
|
||||
missionChanged(currentMissionMst, mst.Missions[currentMissionList[currentMissionIndex+1]].Id);
|
||||
return;
|
||||
if (scenePlaylist.length || partPlaylist.length) {
|
||||
document.getElementById("skip-button").style.cssText = "display: inline-block;";
|
||||
} else {
|
||||
document.getElementById("skip-button").style.cssText = "display: none;";
|
||||
}
|
||||
let promises = [];
|
||||
if(currentScene.IsCustom) {
|
||||
promises.push(utage.parseMissionFile(`${utage.rootDirectory}CustomData/Utage/${currentScene.Folder}/Scenario/${part}_t.tsv`));
|
||||
promises.push(utage.loadMissionTranslation(`${utage.rootDirectory}Js/Translations/MissionsCustom/${currentScene.Folder}/${part}_translations_${selectedLang}.json`));
|
||||
} else {
|
||||
promises.push(utage.parseMissionFile(`${utage.rootDirectory}XDUData/Utage/${currentScene.Folder}/Scenario/${part}_t.tsv`));
|
||||
promises.push(utage.loadMissionTranslation(`${utage.rootDirectory}Js/Translations/Missions/${currentScene.Folder}/${part}_translations_${selectedLang}.json`));
|
||||
}
|
||||
let promises = [
|
||||
utage.parseMissionFile(`${utage.rootDirectory}XDUData/${newMission.Path.replace('Asset/', '').replace('.utage', '').replace('.tsv', '_t.tsv')}`),
|
||||
utage.loadMissionTranslation(`${utage.rootDirectory}Js/Translations/Missions/${currentMission.Path.replace('Asset/Utage/', '').replace('Scenario/', '').replace('.utage', '').replace('.tsv', `_translations_${selectedLang}.json`)}`)
|
||||
];
|
||||
closeMissionModal(undefined, true);
|
||||
Promise.all(promises)
|
||||
.then((success) => {
|
||||
document.getElementById("playing-title").innerText = `${name} (${value})`;
|
||||
document.getElementById("playing-title").innerText = `${name} (${part})`;
|
||||
document.getElementById("title-tag").innerText = name;
|
||||
currentPart = part;
|
||||
player.playFile()
|
||||
.then((success) => {
|
||||
if(currentMissionIndex !== currentMissionList.length - 1) {
|
||||
missionChanged(currentMissionMst, mst.Missions[currentMissionList[currentMissionIndex+1]].Id);
|
||||
} else {
|
||||
player.resetAll();
|
||||
resetMissions();
|
||||
}
|
||||
playNext();
|
||||
}, (failure) => {
|
||||
player.resetAll();
|
||||
resetMissions();
|
||||
resetPlaylist();
|
||||
console.log(failure);
|
||||
});
|
||||
}, (failure) => {
|
||||
resetMissions();
|
||||
resetPlaylist();
|
||||
console.log(failure);
|
||||
});
|
||||
}, (failure) => {
|
||||
@ -291,41 +449,32 @@ function languageChanged(event) {
|
||||
if(!event || !event.currentTarget || !event.currentTarget.value || event.currentTarget.value === '{Select}' || !languages.includes(event.currentTarget.value)) { return; }
|
||||
selectedLang = event.currentTarget.value;
|
||||
let missionPath = '';
|
||||
if(currentMission) {
|
||||
missionPath = `${utage.rootDirectory}Js/Translations/Missions/${currentMission.Path.replace('Asset/Utage/', '').replace('Scenario/', '').replace('.utage', '').replace('.tsv', `_translations_${selectedLang}.json`)}`;
|
||||
if(currentPart) {
|
||||
if (currentScene.IsCustom) {
|
||||
missionPath = `${utage.rootDirectory}Js/Translations/CustomMissions/${currentScene.Folder}/${currentPart}_translations_${selectedLang}.json`;
|
||||
} else {
|
||||
missionPath = `${utage.rootDirectory}Js/Translations/Missions/${currentScene.Folder}/${currentPart}_translations_${selectedLang}.json`;
|
||||
}
|
||||
}
|
||||
utage.setTranslationLanguage(selectedLang, missionPath)
|
||||
.then((success) => {
|
||||
buildMissionSelectList();
|
||||
document.getElementById('text-container').className = selectedLang;
|
||||
buildQuestSelectList();
|
||||
buildSceneSelectList();
|
||||
localStorage.setItem('language', selectedLang);
|
||||
});
|
||||
}
|
||||
|
||||
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;
|
||||
function resetPlaylist() {
|
||||
currentScene = {};
|
||||
scenePlaylist = [];
|
||||
currentPart = "";
|
||||
partPlaylist = [];
|
||||
document.getElementById("skip-button").style.cssText = "display: inline-block;";
|
||||
document.getElementById("playing-title").innerText = 'None';
|
||||
document.getElementById("title-tag").innerText = version;
|
||||
document.getElementById('select-mission').value = '{Select}';
|
||||
document.getElementById("select-quest").value = '{Select}';
|
||||
buildSceneSelectList();
|
||||
}
|
||||
|
||||
function onMainClick(event) {
|
||||
@ -339,10 +488,10 @@ function hideUiClicked(event) {
|
||||
function skipClicked(event) {
|
||||
if(player.uiHidden) {
|
||||
player.hideUiClicked(event);
|
||||
} else if(player.runEvent && currentMissionIndex !== currentMissionList.length - 1) {
|
||||
} else if(player.runEvent) {
|
||||
event.preventDefault();
|
||||
event.stopPropagation();
|
||||
missionChanged(currentMissionMst, utage.groupedMissions[currentMissionMst].Missions[currentMissionList[currentMissionIndex+1]].Id);
|
||||
playNext();
|
||||
}
|
||||
}
|
||||
|
||||
@ -388,11 +537,17 @@ function openHelpModal(event) {
|
||||
iOS: 11+, no audio<br/>
|
||||
</div>
|
||||
</div>
|
||||
<a style="margin-top: auto; text-align: center; "href="https://discord.gg/fpQZQ8g">YameteTomete Discord</a>
|
||||
<div class="follow-links">
|
||||
<div class="follow-links-header">Follow YameteTomete</div>
|
||||
<div class="follow-links-links">
|
||||
<a href="https://discord.gg/fpQZQ8g" target="_blank" >Discord</a>
|
||||
<a href="https://twitter.com/YameteTomete" target="_blank">Twitter</a>
|
||||
</div>
|
||||
</div>
|
||||
<div style="margin-top: auto; text-align: center;">All Symphogear content belongs to its respective owners</div>
|
||||
<div id="modal-buttons">
|
||||
<button onclick="closeModal(event)">Close</button>
|
||||
<a href="https://git.poweris.moe/xduplayer.git/" target="_blank">Source</a>
|
||||
<a href="https://git.poweris.moe/yttt-xdu/XDUPlayer" target="_blank">Source</a>
|
||||
</div>
|
||||
</div>`;
|
||||
document.getElementById("click-catcher").style.cssText = 'display: flex;';
|
||||
@ -406,9 +561,9 @@ function toggleMute(event) {
|
||||
}
|
||||
localStorage.setItem('ismuted', isMuted);
|
||||
if(isMuted) {
|
||||
document.getElementById('mute-button').innerText = "🔇";
|
||||
document.getElementById('mute-button').innerText = emoji.Mute;
|
||||
} else {
|
||||
document.getElementById('mute-button').innerText = "🔊";
|
||||
document.getElementById('mute-button').innerText = emoji.LoudSound;
|
||||
}
|
||||
}
|
||||
|
||||
@ -447,7 +602,7 @@ function onFullScreenChange(event) {
|
||||
} else {
|
||||
document.getElementById('other-controls-container').style.cssText = "";
|
||||
document.getElementById('title-container').style.cssText = "";
|
||||
document.getElementById('fullscreen-button').innerText = "➕";
|
||||
document.getElementById('fullscreen-button').innerText = emoji.HeavyPlusSign;
|
||||
}
|
||||
onWindowResize(event, 0);
|
||||
}
|
||||
|
19
Js/Pixi.min.js
vendored
19
Js/Pixi.min.js
vendored
File diff suppressed because one or more lines are too long
996
Js/Player.js
996
Js/Player.js
File diff suppressed because it is too large
Load Diff
@ -1,25 +1,20 @@
|
||||
//http://glslsandbox.com/e#39992.0
|
||||
|
||||
class Shaders {
|
||||
constructor() {
|
||||
this.leftToRightFadeShader = `
|
||||
precision mediump float;
|
||||
varying vec2 vTextureCoord;
|
||||
uniform vec2 dimensions;
|
||||
uniform vec4 filterArea;
|
||||
uniform vec4 inputPixel;
|
||||
uniform highp vec4 outputFrame;
|
||||
|
||||
uniform float time;
|
||||
uniform vec4 fadeincolor;
|
||||
uniform vec4 fadeoutcolor;
|
||||
|
||||
vec2 mapCoord( vec2 coord ) {
|
||||
coord *= filterArea.xy;
|
||||
coord += filterArea.zw;
|
||||
return coord;
|
||||
}
|
||||
|
||||
void main( void ) {
|
||||
vec2 uv = vTextureCoord;
|
||||
vec2 mappedCoord = mapCoord(uv) / dimensions;
|
||||
vec2 uv = vTextureCoord * inputPixel.xy / outputFrame.zw;
|
||||
vec2 mappedCoord = uv;
|
||||
|
||||
float step2 = time;
|
||||
float step3 = time + 0.2;
|
||||
@ -35,21 +30,16 @@ class Shaders {
|
||||
this.rightToLeftFadeShader = `
|
||||
precision mediump float;
|
||||
varying vec2 vTextureCoord;
|
||||
uniform vec2 dimensions;
|
||||
uniform vec4 filterArea;
|
||||
uniform vec4 inputPixel;
|
||||
uniform highp vec4 outputFrame;
|
||||
|
||||
uniform float time;
|
||||
uniform vec4 fadeincolor;
|
||||
uniform vec4 fadeoutcolor;
|
||||
|
||||
vec2 mapCoord( vec2 coord ) {
|
||||
coord *= filterArea.xy;
|
||||
return coord;
|
||||
}
|
||||
|
||||
void main( void ) {
|
||||
vec2 uv = vTextureCoord;
|
||||
vec2 mappedCoord = mapCoord(uv) / dimensions;
|
||||
vec2 uv = vTextureCoord * inputPixel.xy / outputFrame.zw;
|
||||
vec2 mappedCoord = uv;
|
||||
|
||||
float step2 = (1.0 - time);
|
||||
float step3 = (1.0 - time) - 0.2;
|
||||
@ -65,22 +55,16 @@ class Shaders {
|
||||
this.downToUpFadeShader = `
|
||||
precision mediump float;
|
||||
varying vec2 vTextureCoord;
|
||||
uniform vec2 dimensions;
|
||||
uniform vec4 filterArea;
|
||||
uniform vec4 inputPixel;
|
||||
uniform highp vec4 outputFrame;
|
||||
|
||||
uniform float time;
|
||||
uniform vec4 fadeincolor;
|
||||
uniform vec4 fadeoutcolor;
|
||||
|
||||
vec2 mapCoord( vec2 coord ) {
|
||||
coord *= filterArea.xy;
|
||||
coord += filterArea.zw;
|
||||
return coord;
|
||||
}
|
||||
|
||||
void main( void ) {
|
||||
vec2 uv = vTextureCoord;
|
||||
vec2 mappedCoord = mapCoord(uv) / dimensions;
|
||||
vec2 uv = vTextureCoord * inputPixel.xy / outputFrame.zw;
|
||||
vec2 mappedCoord = uv;
|
||||
|
||||
float step2 = (1.0 - time);
|
||||
float step3 = (1.0 - time) - 0.2;
|
||||
@ -96,22 +80,16 @@ class Shaders {
|
||||
this.uptoDownFadeShader = `
|
||||
precision mediump float;
|
||||
varying vec2 vTextureCoord;
|
||||
uniform vec2 dimensions;
|
||||
uniform vec4 filterArea;
|
||||
uniform vec4 inputPixel;
|
||||
uniform highp vec4 outputFrame;
|
||||
|
||||
uniform float time;
|
||||
uniform vec4 fadeincolor;
|
||||
uniform vec4 fadeoutcolor;
|
||||
|
||||
vec2 mapCoord( vec2 coord ) {
|
||||
coord *= filterArea.xy;
|
||||
coord += filterArea.zw;
|
||||
return coord;
|
||||
}
|
||||
|
||||
void main( void ) {
|
||||
vec2 uv = vTextureCoord;
|
||||
vec2 mappedCoord = mapCoord(uv) / dimensions;
|
||||
vec2 uv = vTextureCoord * inputPixel.xy / outputFrame.zw;
|
||||
vec2 mappedCoord = uv;
|
||||
|
||||
float step2 = time;
|
||||
float step3 = time + 0.2;
|
||||
@ -128,7 +106,6 @@ class Shaders {
|
||||
precision mediump float;
|
||||
varying vec2 vTextureCoord;
|
||||
uniform sampler2D uSampler;
|
||||
uniform vec2 dimensions;
|
||||
uniform float factor;
|
||||
|
||||
vec4 Sepia( in vec4 color )
|
||||
@ -149,10 +126,11 @@ class Shaders {
|
||||
}
|
||||
|
||||
//https://jsfiddle.net/60e5pp8d/1/
|
||||
//v5 changes to shaders, https://github.com/pixijs/pixi.js/wiki/v5-Creating-filters
|
||||
// https://www.html5gamedevs.com/topic/42235-how-to-get-correct-fragment-shader-uv-in-pixi-50-rc0/
|
||||
buildShaders() {
|
||||
let divalefttorightfade = new PIXI.Filter(null, this.leftToRightFadeShader, {
|
||||
time: { type: 'f', value: 0 },
|
||||
dimensions: { type: 'v2', value: [baseDimensions.width, baseDimensions.height] },
|
||||
fadeincolor: { type: 'v4', value: [0.0,0.0,0.0,1.0] },
|
||||
fadeoutcolor: { type: 'v4', value: [0.0,0.0,0.0,0.0] }
|
||||
});
|
||||
@ -161,7 +139,6 @@ class Shaders {
|
||||
|
||||
let divarighttoleftfade = new PIXI.Filter(null, this.rightToLeftFadeShader, {
|
||||
time: { type: 'f', value: 0 },
|
||||
dimensions: { type: 'v2', value: [baseDimensions.width, baseDimensions.height] },
|
||||
fadeincolor: { type: 'v4', value: [0.0,0.0,0.0,1.0] },
|
||||
fadeoutcolor: { type: 'v4', value: [0.0,0.0,0.0,0.0] }
|
||||
});
|
||||
@ -170,7 +147,6 @@ class Shaders {
|
||||
|
||||
let divauptodownfade = new PIXI.Filter(null, this.uptoDownFadeShader, {
|
||||
time: { type: 'f', value: 0 },
|
||||
dimensions: { type: 'v2', value: [baseDimensions.width, baseDimensions.height] },
|
||||
fadeincolor: { type: 'v4', value: [0.0,0.0,0.0,1.0] },
|
||||
fadeoutcolor: { type: 'v4', value: [0.0,0.0,0.0,0.0] }
|
||||
});
|
||||
@ -179,7 +155,6 @@ class Shaders {
|
||||
|
||||
let divadowntoupfade = new PIXI.Filter(null, this.downToUpFadeShader, {
|
||||
time: { type: 'f', value: 0 },
|
||||
dimensions: { type: 'v2', value: [baseDimensions.width, baseDimensions.height] },
|
||||
fadeincolor: { type: 'v4', value: [0.0,0.0,0.0,1.0] },
|
||||
fadeoutcolor: { type: 'v4', value: [0.0,0.0,0.0,0.0] }
|
||||
});
|
||||
@ -187,16 +162,13 @@ class Shaders {
|
||||
this.shaders['divadowntoupfade'] = divadowntoupfade;
|
||||
|
||||
let sepia = new PIXI.Filter(null, this.sepiaShader, {
|
||||
factor: { type: 'f', value: 0.5 },
|
||||
dimensions: { type: 'v2', value: [baseDimensions.width, baseDimensions.height] }
|
||||
factor: { type: 'f', value: 0.5 }
|
||||
});
|
||||
sepia.apply = baseShaderApply;
|
||||
this.shaders['sepia'] = sepia;
|
||||
|
||||
function baseShaderApply(filterManager, input, output) {
|
||||
this.uniforms.dimensions[0] = input.sourceFrame.width;
|
||||
this.uniforms.dimensions[1] = input.sourceFrame.height;
|
||||
filterManager.applyFilter(this, input, output);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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,4 @@ class TextFunctions {
|
||||
this.scrollingText = false;
|
||||
this.lineHeight = -1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1 +1 @@
|
||||
Subproject commit 5b7839ae9b5e47b5bd29d64c06c22a3b000d8959
|
||||
Subproject commit ac0bfbd699431e9befdd843379e7c91ad1014cec
|
220
Js/UtageParse.js
220
Js/UtageParse.js
@ -6,7 +6,9 @@ class UtageInfo {
|
||||
this.currentPlayingFile = [];
|
||||
this.rootDirectory = ``;
|
||||
this.groupedMissions = {};
|
||||
this.missionsList = [];
|
||||
this.quests = {};
|
||||
this.questList = [];
|
||||
this.scenes = {};
|
||||
this.characterInfo = {};
|
||||
this.layerInfo = {};
|
||||
this.localizeInfo = {};
|
||||
@ -16,45 +18,71 @@ class UtageInfo {
|
||||
this.currentTranslation = 'eng';
|
||||
this.translationsInner = {};
|
||||
this.charTranslationsInner = {};
|
||||
this.missionTranslationsInner = {};
|
||||
this.questTranslationsInner = {};
|
||||
this.sceneTranslationsInner = {};
|
||||
this.bgmLoopData = {};
|
||||
this.macros = {};
|
||||
}
|
||||
|
||||
loadUtageSettings(resolve, reject) {
|
||||
loadUtageSettings() {
|
||||
return new Promise((resolve, reject) => {
|
||||
let promises = [
|
||||
commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduMissions.json`),
|
||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Character.tsv`),
|
||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Layer.tsv`),
|
||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Localize.tsv`),
|
||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Param.tsv`),
|
||||
commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduQuest.json`), //0
|
||||
commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduScene.json`), //1
|
||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Character.tsv`), //2
|
||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Layer.tsv`), //3
|
||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Localize.tsv`), //4
|
||||
//commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Param.tsv`),
|
||||
//commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Scenario.tsv`),
|
||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Sound.tsv`),
|
||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Texture.tsv`),
|
||||
commonFunctions.getFileJson(`${this.rootDirectory}Js/BgmLoop.json`),
|
||||
commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduMissionsCustom.json`),
|
||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Sound.tsv`), //5
|
||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Settings/Texture.tsv`), //6
|
||||
commonFunctions.getFileJson(`${this.rootDirectory}XDUData/Bgm/BgmLoop.json`), //7
|
||||
commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduQuestCustom.json`), //8
|
||||
commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduSceneCustom.json`), //9
|
||||
commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomCharacter.tsv`), //10
|
||||
commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomSound.tsv`), //11
|
||||
commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomTexture.tsv`), //12
|
||||
commonFunctions.getFileText(`${this.rootDirectory}XDUData/Utage/Diva/Scenario/Macro.tsv`), //13
|
||||
commonFunctions.getFileText(`${this.rootDirectory}CustomData/Utage/Diva/Settings/CustomMacro.tsv`), //14
|
||||
];
|
||||
Promise.all(promises)
|
||||
.then((success) => {
|
||||
this.groupMissions(success[0], success[8]);
|
||||
this.missionsList = Object.keys(this.groupedMissions).map((k) => {
|
||||
return {Name: this.groupedMissions[k].Name, MstId: this.groupedMissions[k].MstId};
|
||||
this.quests[CUSTOM.stock] = success[0];
|
||||
this.questList = Object.keys(this.quests[CUSTOM.stock]).map((k) => {
|
||||
return {QuestMstId: k, Name: this.quests[CUSTOM.stock][k].Name, IsCustom: false};
|
||||
});
|
||||
this.missionsList.sort();
|
||||
this.parseCharacterInfo(success[1]);
|
||||
this.parseLayerInfo(success[2]);
|
||||
this.parseLocalizeInfo(success[3]);
|
||||
this.parseParamInfo(success[4]);
|
||||
this.quests[CUSTOM.custom] = success[8];
|
||||
for (const k of Object.keys(this.quests[CUSTOM.custom])) {
|
||||
this.questList.push({QuestMstId: k, Name: this.quests[CUSTOM.custom][k].Name, IsCustom: true});
|
||||
}
|
||||
this.questList.sort((a, b) => { return a.QuestMstId - b.QuestMstId });
|
||||
this.scenes[CUSTOM.stock] = success[1];
|
||||
for (const k of Object.keys(this.scenes[CUSTOM.stock])) {
|
||||
this.scenes[CUSTOM.stock][k]['IsCustom'] = false;
|
||||
}
|
||||
this.parseCharacterInfo(success[2]);
|
||||
this.parseLayerInfo(success[3]);
|
||||
this.parseLocalizeInfo(success[4]);
|
||||
//this.parseParamInfo(success[4]);
|
||||
this.parseSoundInfo(success[5]);
|
||||
this.parseTextureInfo(success[6]);
|
||||
this.bgmLoopData = success[7];
|
||||
this.scenes[CUSTOM.custom] = success[9];
|
||||
for (const k of Object.keys(this.scenes[CUSTOM.custom])) {
|
||||
this.scenes[CUSTOM.custom][k]['IsCustom'] = true;
|
||||
}
|
||||
this.parseCharacterInfo(success[10], true);
|
||||
this.parseSoundInfo(success[11], true);
|
||||
this.parseTextureInfo(success[12], true);
|
||||
this.parseMacroFile(success[13]);
|
||||
this.parseMacroFile(success[14]);
|
||||
resolve();
|
||||
}, (failure) => {
|
||||
reject(failure);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
parseMissionFile(file) {
|
||||
return new Promise((resolve, reject) => {
|
||||
commonFunctions.getFileText(file)
|
||||
@ -80,39 +108,7 @@ class UtageInfo {
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
groupMissions(missions, customMissions) {
|
||||
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, Enabled: mis.Enabled };
|
||||
} else {
|
||||
this.groupedMissions[mis.MstId].Missions[mis.Id] = { Id: mis.Id, Path: mis.Path, Enabled: mis.Enabled };
|
||||
}
|
||||
}
|
||||
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, Enabled: mis.Enabled };
|
||||
} else {
|
||||
this.groupedMissions[mis.MstId].Missions[mis.Id] = { Id: mis.Id, Path: mis.Path, Enabled: mis.Enabled };
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
get translations() {
|
||||
return this.translationsInner[this.currentTranslation];
|
||||
}
|
||||
@ -121,20 +117,40 @@ class UtageInfo {
|
||||
return this.charTranslationsInner[this.currentTranslation];
|
||||
}
|
||||
|
||||
get missionTranslations() {
|
||||
return this.missionTranslationsInner[this.currentTranslation];
|
||||
get questTranslations() {
|
||||
return this.questTranslationsInner[this.currentTranslation];
|
||||
}
|
||||
|
||||
get sceneTranslations() {
|
||||
return this.sceneTranslationsInner[this.currentTranslation];
|
||||
}
|
||||
|
||||
setTranslationLanguage(key, missionPath) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.currentTranslation = key;
|
||||
let promises = [this.loadCharacterTranslations(key),
|
||||
this.loadMissionNamesTranslations(key)];
|
||||
this.loadQuestNamesTranslations(key),
|
||||
this.loadSceneNamesTranslations(key)];
|
||||
if(missionPath) {
|
||||
promises.push(this.loadMissionTranslation(missionPath, key));
|
||||
}
|
||||
Promise.all(promises)
|
||||
.then((success) => {
|
||||
// propagate language-based enables downwards from quests to scenes
|
||||
for (const c of [CUSTOM.custom, CUSTOM.stock]) {
|
||||
for (const k of Object.keys(this.questTranslationsInner[this.currentTranslation][c])) {
|
||||
if (this.questTranslationsInner[this.currentTranslation][c][k].Enabled) {
|
||||
for (const s of this.quests[c][k].Scenes) {
|
||||
// only propagate if exists in translation file (THANKS GLOBAL) and translated name is supplied
|
||||
if (c in this.sceneTranslationsInner[this.currentTranslation]
|
||||
&& s in this.sceneTranslationsInner[this.currentTranslation][c]
|
||||
&& this.sceneTranslationsInner[this.currentTranslation][c][s].Name != "") {
|
||||
this.sceneTranslationsInner[this.currentTranslation][c][s].Enabled = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
resolve();
|
||||
}, (failure) => {
|
||||
console.log(failure);
|
||||
@ -165,7 +181,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();
|
||||
@ -177,21 +193,20 @@ class UtageInfo {
|
||||
});
|
||||
}
|
||||
|
||||
loadMissionNamesTranslations() {
|
||||
loadQuestNamesTranslations() {
|
||||
return new Promise((resolve, reject) => {
|
||||
if(this.missionTranslationsInner[this.currentTranslation]) {
|
||||
if(this.questTranslationsInner[this.currentTranslation]) {
|
||||
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/XduQuestNames_${this.currentTranslation}.json`),
|
||||
commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduQuestNamesCustom_${this.currentTranslation}.json`)
|
||||
];
|
||||
Promise.all(promises)
|
||||
.then((success) => {
|
||||
for(let m of Object.keys(success[1])) {
|
||||
success[0][m] = success[1][m];
|
||||
}
|
||||
this.missionTranslationsInner[this.currentTranslation] = success[0];
|
||||
this.questTranslationsInner[this.currentTranslation] = {};
|
||||
this.questTranslationsInner[this.currentTranslation][CUSTOM.stock] = success[0];
|
||||
this.questTranslationsInner[this.currentTranslation][CUSTOM.custom] = success[1];
|
||||
resolve();
|
||||
}, (failure) => {
|
||||
console.log(failure);
|
||||
@ -200,9 +215,62 @@ class UtageInfo {
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
loadSceneNamesTranslations() {
|
||||
return new Promise((resolve, reject) => {
|
||||
if(this.sceneTranslationsInner[this.currentTranslation]) {
|
||||
resolve();
|
||||
} else {
|
||||
var promises = [
|
||||
commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduSceneNames_${this.currentTranslation}.json`),
|
||||
commonFunctions.getFileJson(`${this.rootDirectory}Js/Translations/XduSceneNamesCustom_${this.currentTranslation}.json`)
|
||||
];
|
||||
Promise.all(promises)
|
||||
.then((success) => {
|
||||
this.sceneTranslationsInner[this.currentTranslation] = {};
|
||||
this.sceneTranslationsInner[this.currentTranslation][CUSTOM.stock] = success[0];
|
||||
this.sceneTranslationsInner[this.currentTranslation][CUSTOM.custom] = success[1];
|
||||
resolve();
|
||||
}, (failure) => {
|
||||
console.log(failure);
|
||||
resolve();
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
parseMacroFile(file) {
|
||||
let lines = file.split('\n');
|
||||
let header = lines[0].split('\t');
|
||||
let macro = false;
|
||||
let name = "";
|
||||
for (let i = 1; i < lines.length; ++i) {
|
||||
let line = commonFunctions.readLine(lines[i], header);
|
||||
if (line && !line.comment) {
|
||||
if (macro === false) {
|
||||
if (line.Command[0] === '*') {
|
||||
name = line.Command.slice(1);
|
||||
if (!(name in this.macros)) {
|
||||
macro = true;
|
||||
this.macros[name] = [];
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (line.Command === "EndMacro") {
|
||||
macro = false;
|
||||
continue;
|
||||
}
|
||||
if (!line.Command && !line.Arg1 && !line.Arg2 && !line.Arg3 && !line.Arg4 && !line.Arg5 && !line.Arg6) {
|
||||
continue;
|
||||
}
|
||||
this.macros[name].push(line);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//http://madnesslabo.net/utage/?page_id=4521&lang=en
|
||||
parseCharacterInfo(text) {
|
||||
parseCharacterInfo(text, custom = false) {
|
||||
let lines = text.split("\n");
|
||||
let headers = [];
|
||||
let lastCharName = '';
|
||||
@ -227,10 +295,10 @@ class UtageInfo {
|
||||
}
|
||||
if(read.FileName) {
|
||||
if(!read.FileName.startsWith('file://')) {
|
||||
read.FileName = `${this.rootDirectory}XDUData/Sample/Texture/Character/${read.FileName}`;
|
||||
read.FileName = `${this.rootDirectory}${(custom ? "CustomData" : "XDUData")}/Sample/Texture/Character/${read.FileName}`;
|
||||
} else {
|
||||
read.FileName = read.FileName.replace('file://', '');
|
||||
read.FileName = `${this.rootDirectory}XDUData/${read.FileName}`;
|
||||
read.FileName = `${this.rootDirectory}${(custom ? "CustomData" : "XDUData")}/${read.FileName}`;
|
||||
}
|
||||
}
|
||||
if(!this.characterInfo[lastCharName]) {
|
||||
@ -294,7 +362,7 @@ class UtageInfo {
|
||||
}
|
||||
|
||||
//http://madnesslabo.net/utage/?page_id=4519&lang=en
|
||||
parseSoundInfo(text) {
|
||||
parseSoundInfo(text, custom = false) {
|
||||
let lines = text.split("\n");
|
||||
let headers = [];
|
||||
for(let i = 0; i < lines.length; ++i) {
|
||||
@ -315,10 +383,10 @@ class UtageInfo {
|
||||
let s = read.FileName.split(',');
|
||||
read.FileName = `${s[0].split('_').join('/')}/${s[1]}`;
|
||||
}
|
||||
read.FileName = `${this.rootDirectory}XDUData/Se/${read.FileName}`;
|
||||
read.FileName = `${this.rootDirectory}${(custom ? "CustomData" : "XDUData")}/Se/${read.FileName}`;
|
||||
break;
|
||||
case 'bgm':
|
||||
read.FileName = `${this.rootDirectory}XDUData/Bgm/${read.FileName}`;
|
||||
read.FileName = `${this.rootDirectory}${(custom ? "CustomData" : "XDUData")}/Bgm/${read.FileName}`;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -329,7 +397,7 @@ class UtageInfo {
|
||||
}
|
||||
|
||||
//http://madnesslabo.net/utage/?page_id=4520&lang=en
|
||||
parseTextureInfo(text) {
|
||||
parseTextureInfo(text, custom = false) {
|
||||
let lines = text.split("\n");
|
||||
let headers = [];
|
||||
for(let i = 0; i < lines.length; ++i) {
|
||||
@ -340,10 +408,10 @@ class UtageInfo {
|
||||
let read = commonFunctions.readLine(line, headers);
|
||||
if(read && read.Label) {
|
||||
if(!read.FileName.startsWith("file://")) {
|
||||
read.FileName = `${this.rootDirectory}XDUData/Sample/Texture/BG/${read.FileName}`;
|
||||
read.FileName = `${this.rootDirectory}${(custom ? "CustomData" : "XDUData")}/Sample/Texture/BG/${read.FileName}`;
|
||||
} else {
|
||||
read.FileName = read.FileName.replace("file://", '');
|
||||
read.FileName = `${this.rootDirectory}XDUData/${read.FileName}`;
|
||||
read.FileName = `${this.rootDirectory}${(custom ? "CustomData" : "XDUData")}/${read.FileName}`;
|
||||
}
|
||||
this.textureInfo[read.Label] = read;
|
||||
}
|
||||
@ -354,4 +422,4 @@ class UtageInfo {
|
||||
resetTranslations() {
|
||||
this.translationsInner = {};
|
||||
}
|
||||
}
|
||||
}
|
||||
|
16
Player.html
16
Player.html
@ -1,7 +1,9 @@
|
||||
<!DOCTYPE HTML>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=0" />
|
||||
<meta name="theme-color" content="#393939"/>
|
||||
<title id="title-tag"></title>
|
||||
<link rel="stylesheet" type="text/css" href="Css/generic.min.css">
|
||||
<link rel="stylesheet" type="text/css" href="Css/main.min.css">
|
||||
@ -13,10 +15,9 @@
|
||||
<script src="Js/TextFunctions.js"></script>
|
||||
<script src="Js/UtageParse.js"></script>
|
||||
<script src="Js/Audio.js"></script>
|
||||
<script src="Js/Player.js"></script>
|
||||
<script src="Js/Main.js"></script> -->
|
||||
<script src="Js/Player.js"></script>-->
|
||||
<script src="Js/XduPlayer.min.js"></script>
|
||||
<div id="loading-container" class="centered">
|
||||
<div id="loading-container" class="centered" style="z-index: 20;">
|
||||
<h2 id="loading-utage">Loading Utage Data...</h2>
|
||||
<h2 id="loading-font">Loading Page Data...</h2>
|
||||
</div>
|
||||
@ -24,10 +25,11 @@
|
||||
<div id="title-container"><span>Now Playing: </span><span id="playing-title">None</span></div>
|
||||
<div id="other-controls-container">
|
||||
<div id="volume-control">
|
||||
<span onclick="toggleMute(event)" id="mute-button">🔊</span>
|
||||
<span onclick="toggleMute(event)" id="mute-button">🔊</span> <!-- loud_sound -->
|
||||
<input onchange="onVolumeChange(event)" id="volume-range" value="50" type="range" min="0" max="100" step="1"/>
|
||||
</div>
|
||||
<select id="select-mission" onchange="missionDropDownChanged(event);"></select>
|
||||
<select id="select-quest" onchange="questDropDownChanged(event);"></select>
|
||||
<select id="select-scene" disabled="true" onchange="sceneDropDownChanged(event);"></select>
|
||||
<select id="select-language" onchange="languageChanged(event);"></select>
|
||||
<a style="font-size: 20px; margin-left: 5px;" title="info/help" onclick="openHelpModal(event)">?</a>
|
||||
</div>
|
||||
@ -35,7 +37,7 @@
|
||||
The canvas then resizes as the canvas does and the text-container uses transform scale based off this resolution -->
|
||||
<div id="app-container" onclick="onMainClick(event);">
|
||||
<div id="text-container">
|
||||
<div id="fullscreen-button" onclick="toggleFullscreen(event)">➕</div>
|
||||
<div id="fullscreen-button" onclick="toggleFullscreen(event)">➕</div> <!-- heavy_plus_sign -->
|
||||
<img id="main-ui-img" class="hidden" src="Images/newui_main.png"/>
|
||||
<button id="play-from-query" onclick="playFromQuery(event)" style="display: none;">Play</button>
|
||||
<div id="title" class="hidden">Title Text</div>
|
||||
@ -76,4 +78,4 @@
|
||||
<span style="font-family: 'SourceCodePro-Regular'">test</span> -->
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
14
gulpfile.js
14
gulpfile.js
@ -26,9 +26,6 @@ const cssToCopy = [
|
||||
"Css/main.min.css",
|
||||
"Css/generic.min.css"
|
||||
];
|
||||
const jsonFiles = [
|
||||
"Js/BgmLoop.json",
|
||||
];
|
||||
const translations = [
|
||||
"Js/Translations/**"
|
||||
];
|
||||
@ -50,10 +47,10 @@ gulp.task('dist', gulp.series(
|
||||
buildCss,
|
||||
copyCss
|
||||
),
|
||||
buildJson,
|
||||
buildJsonTranslations,
|
||||
copyHtml,
|
||||
copyImages
|
||||
copyImages,
|
||||
copyCustomData
|
||||
),
|
||||
)
|
||||
);
|
||||
@ -111,10 +108,9 @@ function copyImages() {
|
||||
.pipe(gulp.dest('Dist/Images'));
|
||||
}
|
||||
|
||||
function buildJson() {
|
||||
return gulp.src(jsonFiles)
|
||||
.pipe(jsonmin())
|
||||
.pipe(gulp.dest('Dist/Js'));
|
||||
function copyCustomData() {
|
||||
return gulp.src('CustomData/**')
|
||||
.pipe(gulp.dest('Dist/CustomData'));
|
||||
}
|
||||
|
||||
function buildJsonTranslations() {
|
||||
|
14467
package-lock.json
generated
14467
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
@ -1,16 +1,18 @@
|
||||
{
|
||||
"name": "XduPlayer",
|
||||
"version": "1.0.0",
|
||||
"version": "1.3.0",
|
||||
"private": true,
|
||||
"license": "MIT",
|
||||
"devDependencies": {
|
||||
"gulp": "github:gulpjs/gulp#4.0",
|
||||
"gulp": "~4.0.2",
|
||||
"gulp-concat": "~2.6.1",
|
||||
"gulp-cssmin": "~0.2.0",
|
||||
"gulp-jsonminify": "^1.1.0",
|
||||
"gulp-rename": "~1.2.2",
|
||||
"gulp-sourcemaps": "~2.6.4",
|
||||
"gulp-uglify": "~3.0.0",
|
||||
"gulp-uglify-es": "~1.0.1"
|
||||
"gulp-uglify-es": "~1.0.1",
|
||||
"npm": "^6.9.0",
|
||||
"eslint": "^5.16.0"
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user