danoniplus 44.5.26 → 44.5.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/js/danoni_main.js +37 -10
  2. package/package.json +1 -1
package/js/danoni_main.js CHANGED
@@ -4,12 +4,12 @@
4
4
  *
5
5
  * Source by tickle
6
6
  * Created : 2018/10/08
7
- * Revised : 2026/09/25
7
+ * Revised : 2026/10/07
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 44.5.26`;
12
- const g_revisedDate = `2026/09/25`;
11
+ const g_version = `Ver 44.5.28`;
12
+ const g_revisedDate = `2026/10/07`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -619,7 +619,7 @@ const formatObject = (_obj, _indent = 0, { colorFmt = true, rootKey = `` } = {})
619
619
  if (_list.findIndex(val => val === rootKey) >= 0) {
620
620
  let result = `[`;
621
621
  for (let j = 0; j < _obj.length; j += _numOfSet) {
622
- result += `<br>${nestedIndent}${_obj[j]}: ${_obj[j + 1]}`;
622
+ result += `<br>${nestedIndent}${escapeHtml(_obj[j])}: ${escapeHtml(_obj[j + 1])}`;
623
623
  for (let k = 0; k < _numOfSet - 2; k++) {
624
624
  const idx = j + k + 2;
625
625
  if (idx < _obj.length) {
@@ -682,7 +682,8 @@ const formatObject = (_obj, _indent = 0, { colorFmt = true, rootKey = `` } = {})
682
682
  })
683
683
  : Object.entries(_obj).map(([key, value]) => {
684
684
  const formattedValue = getNextObject(value, rootKey === `` ? key : rootKey);
685
- return `<br>${nestedIndent}"${key}": ${formattedValue}`;
685
+ const formattedKey = colorFmt ? escapeHtml(key) : key;
686
+ return `<br>${nestedIndent}"${formattedKey}": ${formattedValue}`;
686
687
  })).filter(val => !hasVal(val) || val !== `----`);
687
688
 
688
689
  // 配列なら[]で囲む、オブジェクトなら{}で囲む
@@ -5237,6 +5238,9 @@ const titleInit = (_initFlg = false) => {
5237
5238
  // 設定画面位置初期化
5238
5239
  g_settings.settingWindowNum = 0;
5239
5240
 
5241
+ // リトライフラグ初期化
5242
+ g_stateObj.retryFlg = false;
5243
+
5240
5244
  // タイトルアニメーション用フレーム初期化、ループカウンター設定
5241
5245
  g_animationData.forEach(sprite => {
5242
5246
  g_scoreObj[`${sprite}TitleFrameNum`] = 0;
@@ -6021,7 +6025,7 @@ const changeMSelect = (_num, _initFlg = false) => {
6021
6025
  if (j === 0) {
6022
6026
  } else {
6023
6027
  document.getElementById(`btnMusicSelect${j}`).style.fontSize =
6024
- getFontSize2(g_headerObj.musicTitles[idx].slice(0, limitedMLength), g_btnWidth(1 / 2));
6028
+ wUnit(getFontSize2(g_headerObj.musicTitles[idx].slice(0, limitedMLength), g_btnWidth(1 / 2)));
6025
6029
  document.getElementById(`btnMusicSelect${j}`).innerHTML =
6026
6030
  `${g_headerObj.musicTitles[idx].slice(0, limitedMLength)}${g_headerObj.musicTitles[idx].length > limitedMLength ? '...' : ''}<br>` +
6027
6031
  `<span style="font-size:0.7em;line-height:9px"> / ${g_headerObj.artistNames[idx]}</span>`;
@@ -10120,7 +10124,7 @@ const loadingScoreInit = async () => {
10120
10124
  pushArrows(g_scoreObj, speedOnFrame, arrivalFrame);
10121
10125
 
10122
10126
  // メインに入る前の最終初期化処理
10123
- getArrowSettings();
10127
+ getArrowSettings(g_stateObj.retryFlg);
10124
10128
 
10125
10129
  // ユーザカスタムイベント
10126
10130
  g_customJsObj.loading.forEach(func => func());
@@ -11762,16 +11766,28 @@ const invertSpecificTransforms = (cssString, exceptList = []) => {
11762
11766
  });
11763
11767
  }
11764
11768
 
11769
+ // リトライ時にプレイ用キー割り当てを復元するための退避 (初回保存でメモリが既定値へ戻るため)
11770
+ let g_keyCtrlBackup = {};
11771
+
11765
11772
  /**
11766
11773
  * メイン画面前の初期化処理
11767
11774
  */
11768
- const getArrowSettings = () => {
11775
+ const getArrowSettings = (_retryFlg = false) => {
11769
11776
 
11770
11777
  g_attrObj = {};
11771
11778
  const tkObj = getKeyInfo();
11772
11779
  const [keyCtrlPtn, keyNum, posMax, divideCnt] =
11773
11780
  [tkObj.keyCtrlPtn, tkObj.keyNum, tkObj.posMax, tkObj.divideCnt];
11774
11781
 
11782
+ // 新しいプレイ開始時は前回プレイの退避を破棄 (リトライ時は保持して復元に使う)
11783
+ if (!_retryFlg) {
11784
+ g_keyCtrlBackup = {};
11785
+ }
11786
+ // リトライ時: 退避済みのキー割り当てをメモリへ戻してから以降の処理を行う
11787
+ const restoredFlg = _retryFlg && g_keyCtrlBackup[keyCtrlPtn] !== undefined;
11788
+ if (restoredFlg) {
11789
+ g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyCtrlBackup[keyCtrlPtn]);
11790
+ }
11775
11791
  g_keyCopyLists.simpleDef.forEach(header => updateKeyInfo(header, keyCtrlPtn));
11776
11792
  g_headerObj.tuning = g_headerObj.creatorNames[g_stateObj.scoreId];
11777
11793
 
@@ -12122,7 +12138,13 @@ const getArrowSettings = () => {
12122
12138
  }
12123
12139
 
12124
12140
  // リバース、キーコンフィグなどをローカルストレージへ保存(Data Save: ON かつ別キーモードで無い場合)
12125
- if (g_stateObj.dataSaveFlg && !hasVal(g_keyObj[`transKey${keyCtrlPtn}`])) {
12141
+ if (_retryFlg) {
12142
+ // リトライ時は初回に保存済みのため再保存しない (prevKey等も触らない)
12143
+ // 復元したキー割り当ては、初回保存時と同様にメモリ上を既定値へ戻す
12144
+ if (restoredFlg) {
12145
+ g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}d`]);
12146
+ }
12147
+ } else if (g_stateObj.dataSaveFlg && !hasVal(g_keyObj[`transKey${keyCtrlPtn}`])) {
12126
12148
 
12127
12149
  // 次回キーコンフィグ画面へ戻ったとき、保存済みキーコンフィグ設定が表示されるようにする
12128
12150
  g_keyObj.prevKey = `Dummy`;
@@ -12144,6 +12166,7 @@ const getArrowSettings = () => {
12144
12166
  storageObj[`keyCtrl${addKey}`] = setKeyCtrl(g_localKeyStorage, keyNum, keyCtrlPtn);
12145
12167
  if (g_keyObj.currentPtn !== -1) {
12146
12168
  storageObj[`keyCtrlPtn${addKey}`] = g_keyObj.currentPtn;
12169
+ g_keyCtrlBackup[keyCtrlPtn] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}`]);
12147
12170
  g_keyObj[`keyCtrl${keyCtrlPtn}`] = structuredClone(g_keyObj[`keyCtrl${keyCtrlPtn}d`]);
12148
12171
  }
12149
12172
 
@@ -12675,6 +12698,7 @@ const mainInit = () => {
12675
12698
  } else {
12676
12699
  // その他の環境では単にRetryに対応するキーのみで適用
12677
12700
  clearWindow();
12701
+ g_stateObj.retryFlg = true;
12678
12702
  musicAfterLoaded();
12679
12703
  }
12680
12704
 
@@ -15184,7 +15208,10 @@ const resultInit = () => {
15184
15208
  makeLinkButton();
15185
15209
  multiAppend(divRoot,
15186
15210
  // リトライ
15187
- resetCommonBtn(`btnRetry`, g_lblNameObj.b_retry, g_lblPosObj.btnRsRetry, loadMusic, g_cssObj.button_Reset),
15211
+ resetCommonBtn(`btnRetry`, g_lblNameObj.b_retry, g_lblPosObj.btnRsRetry, () => {
15212
+ g_stateObj.retryFlg = true;
15213
+ loadMusic();
15214
+ }, g_cssObj.button_Reset),
15188
15215
 
15189
15216
  createCss2Button(`btnCopyImage`, g_emojiObj.camera, () => true,
15190
15217
  Object.assign(g_lblPosObj.btnRsCopyImage, {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "44.5.26",
3
+ "version": "44.5.28",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "jsdelivr": "./js/danoni_main.js",