danoniplus 44.1.0 → 44.2.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/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/02/08
7
+ * Revised : 2026/02/18
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 44.1.0`;
12
- const g_revisedDate = `2026/02/08`;
11
+ const g_version = `Ver 44.2.0`;
12
+ const g_revisedDate = `2026/02/18`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -6730,7 +6730,7 @@ const drawSpeedGraph = _scoreId => {
6730
6730
  for (let i = 0; i < speedData?.length; i += 2) {
6731
6731
  if (speedData[i] >= startFrame) {
6732
6732
  frame.push(speedData[i] - startFrame);
6733
- speed.push(speedData[i + 1]);
6733
+ speed.push(getSpeedFactor(speedData[i + 1]));
6734
6734
  tmpSpeedPoint.push(speedData[i] - startFrame);
6735
6735
  }
6736
6736
  speedObj[speedType].cnt++;
@@ -8393,7 +8393,7 @@ const createSettingsDisplayWindow = _sprite => {
8393
8393
  const prevDisp = g_settings.displayNum[_name];
8394
8394
  const [prevBarColor, prevBgColor] = [cssBarList[prevDisp], cssBgList[prevDisp]];
8395
8395
 
8396
- g_settings.displayNum[_name] = (prevDisp + _scrollNum) % (_filterFlg ? 2 : list.length);
8396
+ g_settings.displayNum[_name] = nextPos(prevDisp, _scrollNum, _filterFlg ? 2 : list.length);
8397
8397
  const nextDisp = g_settings.displayNum[_name];
8398
8398
  const [nextBarColor, nextBgColor] = [cssBarList[nextDisp], cssBgList[nextDisp]];
8399
8399
 
@@ -8421,7 +8421,7 @@ const createSettingsDisplayWindow = _sprite => {
8421
8421
  if (g_settings[`d_${_name}s`] !== undefined) {
8422
8422
  displaySprite.appendChild(
8423
8423
  makeSettingLblCssButton(`${linkId}R`, `>`, _heightPos, () => switchDisplay(1, false), {
8424
- x: 175 + 180 * _widthPos, w: 25,
8424
+ x: 175 + 180 * _widthPos, w: 25, cxtFunc: () => switchDisplay(-1, false),
8425
8425
  }, g_cssObj.button_Mini)
8426
8426
  );
8427
8427
  }
@@ -10215,7 +10215,7 @@ const scoreConvert = (_dosObj, _scoreId, _preblankFrame, _dummyNo = ``,
10215
10215
  const dosSpeedData = getRefData(_header, `${_scoreNo}${_footer}`);
10216
10216
  const speedData = [];
10217
10217
 
10218
- if (hasVal(dosSpeedData) && g_stateObj.d_speed === C_FLG_ON) {
10218
+ if (hasVal(dosSpeedData) && g_stateObj.d_speed !== C_FLG_OFF) {
10219
10219
  const tmpArrayData = splitLF(dosSpeedData);
10220
10220
 
10221
10221
  tmpArrayData.filter(data => hasVal(data)).forEach(tmpData => {
@@ -10787,6 +10787,27 @@ const getStartFrame = (_lastFrame, _fadein = 0, _scoreId = g_stateObj.scoreId) =
10787
10787
  return frameNum;
10788
10788
  };
10789
10789
 
10790
+ /**
10791
+ * 速度補正値の算出
10792
+ * @param {number} _speed
10793
+ * @returns {number}
10794
+ */
10795
+ const getSpeedFactor = _speed => {
10796
+ if (Math.abs(_speed) === 1) {
10797
+ // ±1 はそのまま返して符号を保持
10798
+ return _speed;
10799
+ }
10800
+ if (g_stateObj.d_speed === `Extreme`) {
10801
+ // |speed|>1 を強めに、<1 を弱めに
10802
+ return _speed * (Math.abs(_speed) > 1 ? 1.5 : 0.75);
10803
+ }
10804
+ if (g_stateObj.d_speed === `Soft`) {
10805
+ // 変化幅を緩和(符号は維持)
10806
+ return (1 + Math.abs(_speed)) / 2 * Math.sign(_speed);
10807
+ }
10808
+ return _speed;
10809
+ }
10810
+
10790
10811
  /**
10791
10812
  * 各フレームごとの速度を格納
10792
10813
  * @param {object} _speedData
@@ -10800,7 +10821,7 @@ const setSpeedOnFrame = (_speedData, _lastFrame) => {
10800
10821
 
10801
10822
  for (let frm = 0, s = 0; frm <= _lastFrame; frm++) {
10802
10823
  while (frm >= _speedData?.[s]) {
10803
- currentSpeed = _speedData[s + 1] * g_stateObj.speed * g_headerObj.baseSpeed * 2;
10824
+ currentSpeed = getSpeedFactor(_speedData[s + 1]) * g_stateObj.speed * g_headerObj.baseSpeed * 2;
10804
10825
  s += 2;
10805
10826
  }
10806
10827
  speedOnFrame[frm] = currentSpeed;
@@ -11056,6 +11077,7 @@ const pushArrows = (_dataObj, _speedOnFrame, _firstArrivalFrame) => {
11056
11077
  } else {
11057
11078
  _data[k] = tmpObj.frm;
11058
11079
  }
11080
+ _data[k + 1] = getSpeedFactor(_data[k + 1]);
11059
11081
  }
11060
11082
  for (let k = 0; k < delIdx; k++) {
11061
11083
  _data.shift();
@@ -14176,6 +14198,10 @@ const resultInit = () => {
14176
14198
  const withOptions = (_flg, _defaultSet, _displayText = _flg) =>
14177
14199
  (_flg !== _defaultSet ? getStgDetailName(_displayText) : ``);
14178
14200
 
14201
+ const withDisplays = (_flg, _defaultSet, _displayText = _flg) =>
14202
+ (_flg !== _defaultSet
14203
+ ? getStgDetailName(_displayText) + (_flg === C_FLG_OFF ? `` : ` : ${getStgDetailName(_flg)}`) : ``);
14204
+
14179
14205
  // 譜面名の組み立て処理 (Ex: 9Akey / Normal-Leftless (maker) [X-Mirror])
14180
14206
  const keyUnitName = getStgDetailName(getKeyUnitName(g_keyObj.currentKey));
14181
14207
  const difDatas = [
@@ -14207,34 +14233,40 @@ const resultInit = () => {
14207
14233
 
14208
14234
  // Display設定の組み立て処理 (Ex: Step : FlatBar, Judge, Life : OFF)
14209
14235
  let displayData = [
14210
- withOptions(g_stateObj.d_stepzone, C_FLG_ON, g_lblNameObj.rd_StepZone +
14211
- `${g_stateObj.d_stepzone === C_FLG_OFF ? `` : ` : ${g_stateObj.d_stepzone}`}`),
14212
- withOptions(g_stateObj.d_judgment, C_FLG_ON, g_lblNameObj.rd_Judgment),
14213
- withOptions(g_stateObj.d_fastslow, C_FLG_ON, g_lblNameObj.rd_FastSlow),
14214
- withOptions(g_stateObj.d_lifegauge, C_FLG_ON, g_lblNameObj.rd_LifeGauge),
14215
- withOptions(g_stateObj.d_score, C_FLG_ON, g_lblNameObj.rd_Score),
14216
- withOptions(g_stateObj.d_musicinfo, C_FLG_ON, g_lblNameObj.rd_MusicInfo),
14217
- withOptions(g_stateObj.d_filterline, C_FLG_ON, g_lblNameObj.rd_FilterLine),
14236
+ withDisplays(g_stateObj.d_stepzone, C_FLG_ON, g_lblNameObj.rd_StepZone),
14237
+ withDisplays(g_stateObj.d_judgment, C_FLG_ON, g_lblNameObj.rd_Judgment),
14238
+ withDisplays(g_stateObj.d_fastslow, C_FLG_ON, g_lblNameObj.rd_FastSlow),
14239
+ withDisplays(g_stateObj.d_lifegauge, C_FLG_ON, g_lblNameObj.rd_LifeGauge),
14240
+ withDisplays(g_stateObj.d_score, C_FLG_ON, g_lblNameObj.rd_Score),
14241
+ withDisplays(g_stateObj.d_musicinfo, C_FLG_ON, g_lblNameObj.rd_MusicInfo),
14242
+ withDisplays(g_stateObj.d_filterline, C_FLG_ON, g_lblNameObj.rd_FilterLine),
14218
14243
  ].filter(value => value !== ``).join(`, `);
14219
14244
  if (displayData === ``) {
14220
14245
  displayData = `All Visible`;
14221
14246
  } else {
14222
- if (!displayData.includes(`,`) && g_stateObj.d_stepzone !== C_FLG_OFF) {
14223
- } else {
14224
- displayData += ` : OFF`;
14247
+ // 表示設定のOFF項目を末尾にまとめる
14248
+ const displayList = displayData.split(`, `).sort((a, b) => b.includes(`:`) - a.includes(`:`));
14249
+ displayData = displayList.join(`, `);
14250
+ if (!displayList.at(-1).includes(`:`)) {
14251
+ displayData += ` : ${getStgDetailName(C_FLG_OFF)}`;
14225
14252
  }
14226
14253
  }
14227
14254
 
14228
14255
  let display2Data = [
14229
- withOptions(g_stateObj.d_speed, C_FLG_ON, g_lblNameObj.rd_Speed),
14230
- withOptions(g_stateObj.d_color, C_FLG_ON, g_lblNameObj.rd_Color),
14231
- withOptions(g_stateObj.d_lyrics, C_FLG_ON, g_lblNameObj.rd_Lyrics),
14232
- withOptions(g_stateObj.d_background, C_FLG_ON, g_lblNameObj.rd_Background),
14233
- withOptions(g_stateObj.d_arroweffect, C_FLG_ON, g_lblNameObj.rd_ArrowEffect),
14234
- withOptions(g_stateObj.d_special, C_FLG_ON, g_lblNameObj.rd_Special),
14256
+ withDisplays(g_stateObj.d_speed, C_FLG_ON, g_lblNameObj.rd_Speed),
14257
+ withDisplays(g_stateObj.d_color, C_FLG_ON, g_lblNameObj.rd_Color),
14258
+ withDisplays(g_stateObj.d_lyrics, C_FLG_ON, g_lblNameObj.rd_Lyrics),
14259
+ withDisplays(g_stateObj.d_background, C_FLG_ON, g_lblNameObj.rd_Background),
14260
+ withDisplays(g_stateObj.d_arroweffect, C_FLG_ON, g_lblNameObj.rd_ArrowEffect),
14261
+ withDisplays(g_stateObj.d_special, C_FLG_ON, g_lblNameObj.rd_Special),
14235
14262
  ].filter(value => value !== ``).join(`, `);
14236
14263
  if (display2Data !== ``) {
14237
- display2Data += ` : OFF`;
14264
+ // 表示設定のOFF項目を末尾にまとめる
14265
+ const display2List = display2Data.split(`, `).sort((a, b) => b.includes(`:`) - a.includes(`:`));
14266
+ display2Data = display2List.join(`, `);
14267
+ if (!display2List.at(-1).includes(`:`)) {
14268
+ display2Data += ` : ${getStgDetailName(C_FLG_OFF)}`;
14269
+ }
14238
14270
  }
14239
14271
 
14240
14272
  const [lblRX, dataRX] = [20, 60];
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2026/02/08 (v44.1.0)
8
+ * Revised : 2026/02/18 (v44.2.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -1281,6 +1281,7 @@ const g_settings = {
1281
1281
 
1282
1282
  // Display設定の拡張リスト
1283
1283
  d_stepZones: [`FlatBar`],
1284
+ d_speeds: [`Extreme`, `Soft`],
1284
1285
 
1285
1286
  displayNum: {
1286
1287
  stepZone: 0,
@@ -2847,13 +2848,16 @@ const g_keyObj = {
2847
2848
  // ColorGroup - 2
2848
2849
  color9A_0_1: [0, 0, 3, 0, 2, 0, 0, 3, 0],
2849
2850
  color9B_0_1: [4, 3, 1, 0, 2, 0, 1, 3, 4],
2851
+ color12_0_1: [3, 3, 3, 3, 2, 1, 0, 1, 0, 1, 0, 1],
2850
2852
  color13_0_1: [4, 4, 3, 4, 0, 0, 3, 0, 2, 0, 0, 3, 0],
2853
+ color14_0_1: [4, 3, 3, 3, 3, 4, 2, 1, 0, 1, 0, 1, 0, 1],
2851
2854
  color17_0_1: [0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4],
2852
2855
 
2853
2856
  color9B_1_1: [0, 0, 1, 0, 2, 0, 0, 1, 0],
2854
2857
  color13_1_1: [0, 0, 3, 0, 2, 0, 0, 3, 0, 4, 4, 3, 4],
2855
2858
  color17_1_1: [1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
2856
2859
 
2860
+ color8_2_1: [2, 1, 0, 1, 0, 1, 0, 1],
2857
2861
  color9A_2_1: [4, 1, 3, 0, 2, 0, 3, 1, 4],
2858
2862
  color9B_2_1: [0, 0, 1, 0, 2, 0, 0, 1, 0],
2859
2863
 
@@ -3392,6 +3396,7 @@ const g_copyKeyPtn = {
3392
3396
  '8_3': `8_2`, // 12key下部はマッピングが異なるため、8_2を流用
3393
3397
  '8_4': `8_2`,
3394
3398
  '8_5': `8_2`,
3399
+
3395
3400
  '7_1': `7_0`,
3396
3401
  '7_2': `7i_0`,
3397
3402
  '7_3': `8_2`,
@@ -4116,6 +4121,8 @@ const g_lblNameObj = {
4116
4121
  'u_Easy': `Easy`,
4117
4122
 
4118
4123
  'u_FlatBar': `FlatBar`,
4124
+ 'u_Extreme': `Extreme`,
4125
+ 'u_Soft': `Soft`,
4119
4126
 
4120
4127
  'u_Visible': `Visible`,
4121
4128
  'u_Hidden': `Hidden`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "44.1.0",
3
+ "version": "44.2.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "scripts": {