diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 3c6bd60..0000000 --- a/.eslintignore +++ /dev/null @@ -1 +0,0 @@ -Js/Pixi.min.js diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index c92e89c..0000000 --- a/.eslintrc.json +++ /dev/null @@ -1,29 +0,0 @@ -{ - "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" - } -} diff --git a/.gitignore b/.gitignore index 60674bd..7d9fd68 100644 --- a/.gitignore +++ b/.gitignore @@ -3,8 +3,6 @@ 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 @@ -12,4 +10,3 @@ web.config /Dist /Css/main.min.css /Js/XduPlayer.min.js -/**/.*.swp \ No newline at end of file diff --git a/.gitmodules b/.gitmodules index 2ce17f3..11fbc2a 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,8 +1,4 @@ [submodule "Js/Translations"] path = Js/Translations - url = https://git.poweris.moe/yttt-xdu/xdutranslations.git - branch = master -[submodule "CustomData"] - path = CustomData - url = https://git.poweris.moe/yttt-xdu/customdata.git + url = https://git.poweris.moe/xdutranslations.git branch = . diff --git a/CHANGELOG.md b/CHANGELOG.md index d5b8181..f2c525c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -14,37 +14,4 @@ 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. - -## 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 +Missions JSON moved to translations submodule so missions can be added/enabled without disturbing main project. \ No newline at end of file diff --git a/Css/generic.min.css b/Css/generic.min.css index 08dcf65..fb2a566 100644 --- a/Css/generic.min.css +++ b/Css/generic.min.css @@ -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}.centered{position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);text-align:center} \ No newline at end of file +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} \ No newline at end of file diff --git a/Css/main.css b/Css/main.css index 779762e..af07dd0 100644 --- a/Css/main.css +++ b/Css/main.css @@ -35,20 +35,10 @@ } @font-face { - font-family: Orbitron-Medium; - src: url(../Fonts/Orbitron Medium.woff2) format('woff'); + font-family: SourceCodePro-Regular; + src: url(../Fonts/SourceCodePro-Regular.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); } @@ -62,30 +52,22 @@ to { transform: translate(0, -5px); } } -html { height: 100%; } - -body { margin: 0; height: 100%; } +body { margin: 0; } .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 { height: 100%; display: flex; flex-direction: column; align-items: center; } +#parent-container { 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; } @@ -122,13 +104,11 @@ body { margin: 0; height: 100%; } #dialog-scroll img { height: 35px; } -#title-container { padding: 2px 0; } +#title-container { margin-bottom: 2px; } -#other-controls-container { padding-bottom: 4px; display: flex; width: 100%; justify-content: center; align-items: center; z-index: 10; } +#other-controls-container { display: flex; width: 550px; justify-content: center; align-items: center; z-index: 10; } -#select-quest { min-width: 0; width: 25% } - -#select-scene { min-width: 0; width: 25% } +#select-mission { min-width: 0; } #select-language { margin-left: 10px; } @@ -158,12 +138,6 @@ body { margin: 0; height: 100%; } #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; } @@ -177,4 +151,4 @@ body { margin: 0; height: 100%; } @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; } -} +} \ No newline at end of file diff --git a/CustomData b/CustomData deleted file mode 160000 index e92af8f..0000000 --- a/CustomData +++ /dev/null @@ -1 +0,0 @@ -Subproject commit e92af8f0d0c0d4246e44dd0b63508f9e460fe3a8 diff --git a/Js/Audio.js b/Js/Audio.js index bb1c33b..8a6c748 100644 --- a/Js/Audio.js +++ b/Js/Audio.js @@ -1,4 +1,5 @@ //(Math.exp(x)-1)/(Math.E-1) +//🔊 class bufferLoader { constructor(context, soundMap, callback) { @@ -181,4 +182,4 @@ class audioController { } this.sources = {}; } -} +} \ No newline at end of file diff --git a/Js/BgmLoop.json b/Js/BgmLoop.json new file mode 100644 index 0000000..ff86d76 --- /dev/null +++ b/Js/BgmLoop.json @@ -0,0 +1,899 @@ +{ + "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 + } + } +} \ No newline at end of file diff --git a/Js/Common.js b/Js/Common.js index 31f73fb..4f0cb8e 100644 --- a/Js/Common.js +++ b/Js/Common.js @@ -4,11 +4,6 @@ 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) => { @@ -339,7 +334,8 @@ class commonFunctions { if(props[i] == " ") { break; } retval.color += props[i]; } + retval.color = retval.color; } return retval; } -} +} \ No newline at end of file diff --git a/Js/Main.js b/Js/Main.js index 7ba61db..5ff9c78 100644 --- a/Js/Main.js +++ b/Js/Main.js @@ -2,7 +2,7 @@ const pixiApp = { app: new PIXI.Application(baseDimensions), - loader: PIXI.Loader.shared + loader: PIXI.loader }; const utage = new UtageInfo(); @@ -10,17 +10,16 @@ const shaders = new Shaders(); const textFunc = new TextFunctions(); let audio = undefined; //Cant create a audio context without user input. const player = new Player(pixiApp, utage, textFunc, audio, shaders); -const languages = ["eng", "jpn", "rus", "cze", "enm", "kor", "zho"]; -const version = "YameteTomete XDUPlayer V1.5.0"; +const languages = ["eng", "jpn"]; +const version = "YameteTomete XDUPlayer V1.2.0"; let bodyLoaded = false; let utageLoaded = false; let languagesLoaded = false; let selectedLang = "eng"; -let currentScene = {}; -let currentSceneId = ""; -let scenePlaylist = []; -let currentPart = ""; -let partPlaylist = []; +let currentMission = undefined; +let currentMissionMst = 0; +let currentMissionIndex = 0; +let currentMissionList = []; let urlParams = {}; let screenw = Math.max(document.documentElement.clientWidth, window.innerWidth || 0); let screenh = Math.max(document.documentElement.clientHeight, window.innerHeight || 0); @@ -28,22 +27,16 @@ let screenSizeTimeout = undefined; let isMuted = false; let volume = 0.5; let fullScreen = false; -let prevScene = '{Select}'; -let prevQuest = '{Select}'; - -const emoji = { - LoudSound: String.fromCodePoint(0x1f50a), - Mute: String.fromCodePoint(0x1f507), - HeavyPlusSign: String.fromCodePoint(0x2795) -}; +let prevMission = '{Select}'; +const availableMstIds = [202070, 202071, 202013, 338001, 338002, 338003, 338004]//[202070, 202013, 338001, 338002, 338003, 338004, 338005, 338006, 338007, 338009, 338010, 338011]; 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() { @@ -62,7 +55,6 @@ function onBodyLoaded() { (function checkIsLoaded() { if(bodyLoaded) { document.getElementById('loading-font').style.cssText = "display: none;"; - checkQueryParameters(); loadLocalStorage(); } if(utageLoaded && languagesLoaded) { @@ -78,8 +70,7 @@ function onBodyLoaded() { function onAllLoaded(success) { textFunc.findTextElements(); - buildQuestSelectList(); - buildSceneSelectList(); + buildMissionSelectList(); buildLanguageList(); let appContainer = document.getElementById('app-container'); appContainer.appendChild(pixiApp.app.view); @@ -105,16 +96,15 @@ function loadLocalStorage() { audio.mute(isMuted); } if(isMuted) { - document.getElementById('mute-button').innerText = emoji.Mute; + document.getElementById('mute-button').innerText = "🔇"; } else { - document.getElementById('mute-button').innerText = emoji.LoudSound; + document.getElementById('mute-button').innerText = "🔊"; } //language - let lang = urlParams['lang'] || localStorage.getItem('language') || "eng"; + let lang = localStorage.getItem('language') || "eng"; if(languages.includes(lang)) { selectedLang = lang; } - document.getElementById('text-container').className = selectedLang; utage.setTranslationLanguage(selectedLang, '') .then((success) => { languagesLoaded = true; @@ -127,79 +117,27 @@ function loadLocalStorage() { } } -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 Event'; - } else { - 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; - } - 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; - } - 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) { +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 === -2) { + if(i === -1) { opt.setAttribute('value', '{Select}'); - opt.innerText = 'Select Scene'; - } else if (i === -1) { - opt.setAttribute('value', '{All}'); - opt.innerText = 'Play All'; + opt.innerText = 'Select Mission'; } 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"); + let m = utage.missionsList[i]; + if(!Object.keys(utage.groupedMissions[m.MstId].Missions).some((mis) => { return utage.groupedMissions[m.MstId].Missions[mis].Enabled === true })) { continue; } - if (!tl_key.Enabled) { - continue; + opt.setAttribute('value', m.MstId); + let name = m.Name; + if(utage.missionTranslations[m.MstId]) { + name = utage.missionTranslations[m.MstId].Name || name; } - name = tl_key.Name || name; opt.innerText = name; } - sceneBox.appendChild(opt); + selectBox.appendChild(opt); } } @@ -217,85 +155,29 @@ function buildLanguageList() { function checkQueryParameters() { urlParams = commonFunctions.readQueryParameters(); - 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;"; - } + 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;"; } } function playFromQuery(event) { - let cust; - if (urlParams['custom'] && urlParams['custom'] === "1") { - cust = CUSTOM.custom; - } else { - cust = CUSTOM.stock; - } - sceneSet(urlParams['questscenemstid'], cust); + missionChanged(urlParams['mstid'], urlParams['id']); document.getElementById('play-from-query').style.cssText = "display: none;"; } -function questDropDownChanged(event) { - if(!event || !event.currentTarget || !event.currentTarget.value) { return; } - buildSceneSelectList(); -} - -function sceneDropDownChanged(event) { +function missionDropDownChanged(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 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 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 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(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; } if(!credits) { if(selectedLang === "eng") { @@ -304,21 +186,19 @@ function sceneDropDownChanged(event) { credits = "None"; } } - let chapterSelect = '
+ = 0x80 (not a basic code point)","invalid-input":"Invalid input"},N=w-E,B=Math.floor,F=String.fromCharCode;if(b={version:"1.4.1",ucs2:{decode:u,encode:h},decode:f,encode:p,toASCII:g,toUnicode:v},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return b});else if(y&&m)if(r.exports==y)m.exports=b;else for(x in b)b.hasOwnProperty(x)&&(y[x]=b[x]);else i.punycode=b}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],28:[function(t,e,r){"use strict";function n(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,o){e=e||"&",r=r||"=";var s={};if("string"!=typeof t||0===t.length)return s;var a=/\+/g;t=t.split(e);var u=1e3;o&&"number"==typeof o.maxKeys&&(u=o.maxKeys);var h=t.length;u>0&&h>u&&(h=u);for(var l=0;l