danoniplus 27.7.0 → 28.0.0

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.
package/README.md CHANGED
@@ -90,16 +90,26 @@ If you would like to cooperate with the development, please see below. Even if y
90
90
  ## Community / コミュニティ
91
91
  - [Dancing☆Onigiri Discordサーバー](https://discord.gg/TegbHFY7zg)
92
92
  - [得点報告用Gitter](https://gitter.im/danonicw/freeboard)
93
- - [Twitter #danoni](https://twitter.com/search?q=%23danoni%20OR%20%22%E3%83%80%E3%83%B3%E3%81%8A%E3%81%AB%E3%81%A3%E3%81%9F%E3%83%BC%22&src=typed_query&f=live)
93
+ - [Twitter #danoni](https://twitter.com/search?q=%23danoni&src=typed_query&f=live)
94
94
 
95
- ## Related Tools Repository / 関連ツール
95
+ ## Related Tools Repository / 関連リポジトリ・ツール
96
+ ### Dancing☆Onigiri
96
97
  - [Dancing☆Onigiri エディター(CW Edition 対応)](https://github.com/superkuppabros/danoni-editor) @superkuppabros
97
98
  - [ダンおに曲データjs化ツール](https://github.com/suzme/danoni-base64) @suzme
98
99
  - [ダンおに矢印色ツール](https://github.com/suzme/danoni-colorpicker) @suzme
99
- - [Dancing☆Onigiri Chart Reverser](https://github.com/cwtickle/danoniplus-reverser)
100
- - [Dancing☆Onigiri Chart Converter](https://github.com/cwtickle/danoniplus-converter)
100
+ - [Dancing☆Onigiri Chart Reverser](https://github.com/cwtickle/danoniplus-reverser) @cwtickle
101
+ - [Dancing☆Onigiri Chart Converter](https://github.com/cwtickle/danoniplus-converter) @cwtickle
101
102
  - [ダンおにゲージ計算機 (Gauge Calculator)](http://www.omission0.com/other/gauge_calculator/) @goe0
103
+
104
+ ### キリズマ
102
105
  - [キリズマ譜面データ変換機](https://github.com/suzme/kirizma-converter) @suzme
106
+ - [キリズマ歌詞表示作成ツール](https://github.com/prlg25/kirizma_lyric) @prlg25
107
+ - [キリズマ難易度表](https://github.com/suzme/kirizma) @suzme
108
+
109
+ ### Punching◇Panels
110
+ - [Punching◇Panels](https://github.com/cwtickle/punching-panels) @cwtickle
111
+ - [Punching◇Panels エディター](https://github.com/suzme/punpane-editor) @suzme
112
+ - [Punching◇Panels 難易度表](https://github.com/suzme/punpane) @suzme
103
113
 
104
114
  ## License / ライセンス
105
115
  This software is released under the MIT License, see LICENSE.
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 : 2022/07/01
7
+ * Revised : 2022/08/21
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 27.7.0`;
12
- const g_revisedDate = `2022/07/01`;
11
+ const g_version = `Ver 28.0.0`;
12
+ const g_revisedDate = `2022/08/21`;
13
13
  const g_alphaVersion = ``;
14
14
 
15
15
  // カスタム用バージョン (danoni_custom.js 等で指定可)
@@ -365,7 +365,7 @@ const makeDedupliArray = (_array1, ..._arrays) =>
365
365
  * @param {array2} _array2d
366
366
  * @returns
367
367
  */
368
- const copyArray2d = _array2d => JSON.parse(JSON.stringify(_array2d));
368
+ const copyArray2d = _array2d => structuredClone(_array2d);
369
369
 
370
370
  /**
371
371
  * 配列データを合計
@@ -4224,7 +4224,7 @@ const createOptionWindow = _sprite => {
4224
4224
  // 速度(Speed)
4225
4225
  // 縦位置: 2 短縮ショートカットあり
4226
4226
  createGeneralSetting(spriteList.speed, `speed`, {
4227
- skipTerms: [20, 5, 1], hiddenBtn: true, scLabel: g_lblNameObj.sc_speed, roundNum: 5,
4227
+ skipTerms: g_settings.speedTerms, hiddenBtn: true, scLabel: g_lblNameObj.sc_speed, roundNum: 5,
4228
4228
  unitName: ` ${g_lblNameObj.multi}`,
4229
4229
  });
4230
4230
 
@@ -4259,45 +4259,59 @@ const createOptionWindow = _sprite => {
4259
4259
  if (g_headerObj.scoreDetailUse) {
4260
4260
  spriteList.speed.appendChild(
4261
4261
  createCss2Button(`btnGraph`, `i`, _ => true, {
4262
- x: 415, y: 0, w: 23, h: 23, siz: C_SIZ_JDGCNTS, title: g_msgObj.graph,
4262
+ x: -25, y: -60, w: 30, h: 30, siz: C_SIZ_JDGCHARA, title: g_msgObj.graph,
4263
4263
  resetFunc: _ => setScoreDetail(), cxtFunc: _ => setScoreDetail(),
4264
4264
  }, g_cssObj.button_Mini)
4265
4265
  );
4266
4266
  g_stateObj.scoreDetailViewFlg = false;
4267
4267
  const scoreDetail = createEmptySprite(optionsprite, `scoreDetail`, g_windowObj.scoreDetail, g_cssObj.settings_DifSelector);
4268
- const viewScText = _ => createScText(lnkScoreDetail, `ScoreDetail`, { targetLabel: `lnkScoreDetail`, x: -10 });
4269
4268
 
4270
4269
  /**
4271
4270
  * 譜面明細表示の切替
4272
4271
  * @param {number} _val
4273
4272
  */
4274
- const changeScoreDetail = (_val = 1) => {
4273
+ const changeScoreDetail = (_val = 0) => {
4274
+ if (g_currentPage === `difSelector`) {
4275
+ resetDifWindow();
4276
+ }
4275
4277
  g_stateObj.scoreDetailViewFlg = true;
4276
4278
  scoreDetail.style.visibility = `visible`;
4279
+
4280
+ // 表示内容を非表示化、ボタン色をデフォルトに戻す
4277
4281
  $id(`detail${g_stateObj.scoreDetail}`).visibility = `hidden`;
4278
- setSetting(_val, `scoreDetail`);
4279
- viewScText();
4282
+ document.getElementById(`lnk${g_stateObj.scoreDetail}G`).classList.replace(g_cssObj.button_Setting, g_cssObj.button_Default);
4283
+
4284
+ // 選択先を表示、ボタン色を選択中に変更
4285
+ // Qキーを押したときのリンク先を次の明細へ変更
4286
+ g_stateObj.scoreDetail = g_settings.scoreDetails[_val];
4287
+ [`option`, `difSelector`].forEach(page => g_shortcutObj[page].KeyQ.id = g_settings.scoreDetailCursors[(_val + 1) % g_settings.scoreDetailCursors.length]);
4288
+
4280
4289
  $id(`detail${g_stateObj.scoreDetail}`).visibility = `visible`;
4290
+ document.getElementById(`lnk${g_stateObj.scoreDetail}G`).classList.replace(g_cssObj.button_Default, g_cssObj.button_Setting);
4281
4291
  };
4282
4292
 
4283
4293
  multiAppend(scoreDetail,
4284
4294
  createScoreDetail(`Speed`),
4285
4295
  createScoreDetail(`Density`),
4286
4296
  createScoreDetail(`ToolDif`, false),
4287
- makeSettingLblCssButton(`lnkScoreDetailB`, `- - -`, 0, _ => changeScoreDetail(-1),
4288
- g_lblPosObj.lnkScoreDetailB, g_cssObj.button_RevON),
4289
- makeSettingLblCssButton(`lnkScoreDetail`, `${getStgDetailName(g_stateObj.scoreDetail)}`, 0, _ => changeScoreDetail(),
4290
- Object.assign(g_lblPosObj.lnkScoreDetail, {
4291
- cxtFunc: _ => changeScoreDetail(-1),
4292
- }), g_cssObj.button_RevON),
4293
4297
  );
4294
- viewScText();
4298
+ g_settings.scoreDetails.forEach((sd, j) => {
4299
+ scoreDetail.appendChild(
4300
+ makeDifLblCssButton(`lnk${sd}G`, getStgDetailName(sd), j, _ => changeScoreDetail(j), { w: C_LEN_DIFCOVER_WIDTH, btnStyle: (g_stateObj.scoreDetail === sd ? `Setting` : `Default`) })
4301
+ );
4302
+ createScText(document.getElementById(`lnk${sd}G`), `${sd}G`, { targetLabel: `lnk${sd}G`, x: -10 });
4303
+ });
4295
4304
  }
4296
4305
 
4297
4306
  /**
4298
4307
  * 譜面明細表示/非表示ボタンの処理
4299
4308
  */
4300
4309
  const setScoreDetail = _ => {
4310
+ if (g_currentPage === `difSelector`) {
4311
+ resetDifWindow();
4312
+ g_stateObj.scoreDetailViewFlg = false;
4313
+ g_shortcutObj.difSelector.KeyQ.id = g_settings.scoreDetailCursors[0];
4314
+ }
4301
4315
  const scoreDetail = document.querySelector(`#scoreDetail`);
4302
4316
  const detailObj = document.querySelector(`#detail${g_stateObj.scoreDetail}`);
4303
4317
  const visibles = [`hidden`, `visible`];
@@ -4305,6 +4319,9 @@ const createOptionWindow = _sprite => {
4305
4319
  g_stateObj.scoreDetailViewFlg = !g_stateObj.scoreDetailViewFlg;
4306
4320
  scoreDetail.style.visibility = visibles[Number(g_stateObj.scoreDetailViewFlg)];
4307
4321
  detailObj.style.visibility = visibles[Number(g_stateObj.scoreDetailViewFlg)];
4322
+
4323
+ // Qキーを押したときのカーソル位置を先頭に初期化
4324
+ g_shortcutObj.option.KeyQ.id = g_settings.scoreDetailCursors[0];
4308
4325
  };
4309
4326
 
4310
4327
  /**
@@ -4381,7 +4398,7 @@ const createOptionWindow = _sprite => {
4381
4398
  context.font = `${C_SIZ_DIFSELECTOR}px ${getBasicFont()}`;
4382
4399
  context.fillText(speedType, lineX + 35, 218);
4383
4400
 
4384
- updateScoreDetailLabel(`Speed`, g_lblNameObj[`s_${speedType}`], speedObj[speedType].cnt, j);
4401
+ updateScoreDetailLabel(`Speed`, `${speedType}S`, speedObj[speedType].cnt, j, g_lblNameObj[`s_${speedType}`]);
4385
4402
  });
4386
4403
  };
4387
4404
 
@@ -4421,10 +4438,10 @@ const createOptionWindow = _sprite => {
4421
4438
  });
4422
4439
 
4423
4440
  const obj = getScoreBaseData(_scoreId);
4424
- updateScoreDetailLabel(`Density`, g_lblNameObj.s_apm, obj.apm, 0);
4425
- updateScoreDetailLabel(`Density`, g_lblNameObj.s_time, obj.playingTime, 1);
4426
- updateScoreDetailLabel(`Density`, g_lblNameObj.s_arrow, obj.arrowCnts, 3);
4427
- updateScoreDetailLabel(`Density`, g_lblNameObj.s_frz, obj.frzCnts, 4);
4441
+ updateScoreDetailLabel(`Density`, `APM`, obj.apm, 0, g_lblNameObj.s_apm);
4442
+ updateScoreDetailLabel(`Density`, `Time`, obj.playingTime, 1, g_lblNameObj.s_time);
4443
+ updateScoreDetailLabel(`Density`, `Arrow`, obj.arrowCnts, 3, g_lblNameObj.s_arrow);
4444
+ updateScoreDetailLabel(`Density`, `Frz`, obj.frzCnts, 4, g_lblNameObj.s_frz);
4428
4445
  };
4429
4446
 
4430
4447
  /**
@@ -4439,7 +4456,7 @@ const createOptionWindow = _sprite => {
4439
4456
  const baseLabel = (_bLabel, _bLabelname, _bAlign) =>
4440
4457
  document.querySelector(`#detail${_name}`).appendChild(
4441
4458
  createDivCss2Label(`${_bLabel}`, `${_bLabelname}`, {
4442
- x: 10, y: 65 + _pos * 20, w: 100, h: 20, siz: C_SIZ_DIFSELECTOR, align: _bAlign,
4459
+ x: 10, y: 105 + _pos * 20, w: 100, h: 20, siz: C_SIZ_DIFSELECTOR, align: _bAlign,
4443
4460
  })
4444
4461
  );
4445
4462
  if (document.querySelector(`#data${_label}`) === null) {
@@ -4544,7 +4561,7 @@ const createOptionWindow = _sprite => {
4544
4561
  makeDifInfoLabel(`dataArrowInfo`, ``, g_lblPosObj.dataArrowInfo),
4545
4562
  makeDifInfoLabel(`lblArrowInfo2`, ``, g_lblPosObj.lblArrowInfo2),
4546
4563
  makeDifInfoLabel(`dataArrowInfo2`, ``, g_lblPosObj.dataArrowInfo2),
4547
- makeSettingLblCssButton(`lnkDifInfo`, g_lblNameObj.s_print, 0, _ => {
4564
+ makeDifLblCssButton(`lnkDifInfo`, g_lblNameObj.s_print, 8, _ => {
4548
4565
  copyTextToClipboard(
4549
4566
  `****** ${g_lblNameObj.s_printTitle} [${g_version}] ******\r\n\r\n`
4550
4567
  + `\t${g_lblNameObj.s_printHeader}\r\n\r\n${printData}`, g_msgInfoObj.I_0003
@@ -4814,7 +4831,7 @@ const createOptionWindow = _sprite => {
4814
4831
  // タイミング調整 (Adjustment)
4815
4832
  // 縦位置: 10 短縮ショートカットあり
4816
4833
  createGeneralSetting(spriteList.adjustment, `adjustment`, {
4817
- skipTerms: [50, 10, 5], hiddenBtn: true, scLabel: g_lblNameObj.sc_adjustment, roundNum: 5,
4834
+ skipTerms: g_settings.adjustmentTerms, hiddenBtn: true, scLabel: g_lblNameObj.sc_adjustment, roundNum: 5,
4818
4835
  unitName: g_lblNameObj.frame,
4819
4836
  });
4820
4837
 
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2022/07/01 (v27.7.0)
8
+ * Revised : 2022/08/21 (v28.0.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -171,13 +171,6 @@ const updateWindowSiz = _ => {
171
171
  },
172
172
 
173
173
  /** 設定: 譜面明細子画面 */
174
- lnkScoreDetailB: {
175
- x: 10, w: 100, visibility: `hidden`,
176
- },
177
- lnkScoreDetail: {
178
- x: 10, w: 100, borderStyle: `solid`,
179
- },
180
-
181
174
  lblTooldif: {
182
175
  y: 5, w: 250, siz: C_SIZ_JDGCNTS,
183
176
  },
@@ -207,7 +200,7 @@ const updateWindowSiz = _ => {
207
200
  x: 140, y: 70, w: 275, h: 150, overflow: `auto`,
208
201
  },
209
202
  lnkDifInfo: {
210
- x: 10, y: 30, w: 100, borderStyle: `solid`,
203
+ w: C_LEN_DIFCOVER_WIDTH, borderStyle: `solid`,
211
204
  },
212
205
 
213
206
  /** ディスプレイ画面 */
@@ -750,6 +743,7 @@ let g_appearanceRanges = [`Hidden+`, `Sudden+`, `Hid&Sud+`];
750
743
  const g_settings = {
751
744
  speeds: [...Array((C_MAX_SPEED - C_MIN_SPEED) * 20 + 1).keys()].map(i => C_MIN_SPEED + i / 20),
752
745
  speedNum: 0,
746
+ speedTerms: [20, 5, 1],
753
747
 
754
748
  motions: [C_FLG_OFF, `Boost`, `Brake`],
755
749
  motionNum: 0,
@@ -771,6 +765,7 @@ const g_settings = {
771
765
 
772
766
  adjustments: [...Array(C_MAX_ADJUSTMENT * 20 + 1).keys()].map(i => (i - C_MAX_ADJUSTMENT * 10) / 10),
773
767
  adjustmentNum: C_MAX_ADJUSTMENT * 10,
768
+ adjustmentTerms: (g_isFile ? [50, 10, 1] : [50, 10, 5]),
774
769
 
775
770
  volumes: [0, 0.5, 1, 2, 5, 10, 25, 50, 75, 100],
776
771
 
@@ -783,11 +778,13 @@ const g_settings = {
783
778
  opacitys: [10, 25, 50, 75, 100],
784
779
 
785
780
  scoreDetails: [`Speed`, `Density`, `ToolDif`],
786
- scoreDetailNum: 0,
781
+ scoreDetailCursors: [],
787
782
  };
788
783
 
789
784
  g_settings.volumeNum = g_settings.volumes.length - 1;
790
785
  g_settings.opacityNum = g_settings.opacitys.length - 1;
786
+ g_settings.scoreDetailCursors = g_settings.scoreDetails.map(val => `lnk${val}G`);
787
+ g_settings.scoreDetailCursors.push(`btnGraph`);
791
788
 
792
789
  /**
793
790
  * 設定画面間移動
@@ -1192,8 +1189,13 @@ const g_shortcutObj = {
1192
1189
  KeyV: { id: `lnkVolumeR` },
1193
1190
 
1194
1191
  KeyI: { id: `btnGraph` },
1195
- ShiftLeft_KeyQ: { id: `lnkScoreDetailB` },
1196
- KeyQ: { id: `lnkScoreDetail` },
1192
+ Digit1: { id: `lnkSpeedG` },
1193
+ Digit2: { id: `lnkDensityG` },
1194
+ Digit3: { id: `lnkToolDifG` },
1195
+ Numpad1: { id: `lnkSpeedG` },
1196
+ Numpad2: { id: `lnkDensityG` },
1197
+ Numpad3: { id: `lnkToolDifG` },
1198
+ KeyQ: { id: `lnkSpeedG` },
1197
1199
  KeyP: { id: `lnkDifInfo` },
1198
1200
  KeyZ: { id: `btnSave` },
1199
1201
 
@@ -1212,6 +1214,16 @@ const g_shortcutObj = {
1212
1214
  ArrowDown: { id: `btnDifD` },
1213
1215
  ArrowUp: { id: `btnDifU` },
1214
1216
 
1217
+ KeyI: { id: `btnGraph` },
1218
+ Digit1: { id: `lnkSpeedG` },
1219
+ Digit2: { id: `lnkDensityG` },
1220
+ Digit3: { id: `lnkToolDifG` },
1221
+ Numpad1: { id: `lnkSpeedG` },
1222
+ Numpad2: { id: `lnkDensityG` },
1223
+ Numpad3: { id: `lnkToolDifG` },
1224
+ KeyQ: { id: `lnkSpeedG` },
1225
+ KeyP: { id: `lnkDifInfo` },
1226
+
1215
1227
  Escape: { id: `btnBack` },
1216
1228
  Space: { id: `btnKeyConfig` },
1217
1229
  Enter: { id: `lnkDifficulty` },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "27.7.0",
3
+ "version": "28.0.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {