danoniplus 43.6.4 → 44.1.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/01/31
7
+ * Revised : 2026/02/08
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 43.6.4`;
12
- const g_revisedDate = `2026/01/31`;
11
+ const g_version = `Ver 44.1.0`;
12
+ const g_revisedDate = `2026/02/08`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -3969,6 +3969,12 @@ const headerConvert = _dosObj => {
3969
3969
  }
3970
3970
  });
3971
3971
 
3972
+ // 縦伸縮率の設定
3973
+ const stretchYRate = [];
3974
+ _dosObj.stretchYRate?.split(`$`).forEach((val, j) => {
3975
+ stretchYRate[j] = hasVal(val) ? setVal(val, 1, C_TYP_FLOAT) : 1;
3976
+ });
3977
+ obj.stretchYRate = makeBaseArray(stretchYRate, obj.difLabels.length, 1);
3972
3978
  // 最終演出表示有無(noneで無効化)
3973
3979
  obj.finishView = _dosObj.finishView ?? ``;
3974
3980
 
@@ -9776,6 +9782,28 @@ const loadingScoreInit = async () => {
9776
9782
  }
9777
9783
  g_scoreObj = scoreConvert(g_rootObj, g_stateObj.scoreId, 0, dummyIdHeader);
9778
9784
 
9785
+ // Motionオプション適用時の矢印別の速度を取得(配列形式)
9786
+ g_workObj.motionOnFrames = setMotionOnFrame();
9787
+ g_workObj.motionReverseFlg = g_workObj.motionOnFrames.filter(val => g_stateObj.speed + val < 0).length > 0;
9788
+
9789
+ // 矢印描画時間の引き伸ばし設定(個別加速がある場合かつ逆走を伴うモーションは初期倍速によりさらに引き伸ばしを行う)
9790
+ // ただし、速度による引き伸ばし(boostFactor)の上限は描画の関係で2倍までとする
9791
+ let maxBoost = 1;
9792
+ for (let j = 0; j < g_scoreObj.boostData.length; j += 2) {
9793
+ maxBoost = Math.max(maxBoost, g_scoreObj.boostData[j + 1]);
9794
+ }
9795
+ const boostFactor = 1 + (
9796
+ (g_settings.motionDistRates[g_settings.motionNum] === 1 || !g_workObj.motionReverseFlg)
9797
+ ? 0
9798
+ : (
9799
+ g_stateObj.speed * g_headerObj.baseSpeed - g_settings.motionBoostFactorMinSpd > 0 && maxBoost > 1
9800
+ ? Math.min(maxBoost / 4, 1) : 0
9801
+ )
9802
+ );
9803
+ g_scoreObj.distY = Math.max(
9804
+ g_headerObj.stretchYRate[g_stateObj.scoreId], g_settings.motionDistRates[g_settings.motionNum] * boostFactor
9805
+ ) * g_posObj.distY;
9806
+
9779
9807
  // 最終フレーム数の取得
9780
9808
  let lastFrame = getLastFrame(g_scoreObj) + g_headerObj.blankFrame;
9781
9809
 
@@ -9788,9 +9816,6 @@ const loadingScoreInit = async () => {
9788
9816
  // フレームごとの速度を取得(配列形式)
9789
9817
  let speedOnFrame = setSpeedOnFrame(g_scoreObj.speedData, lastFrame);
9790
9818
 
9791
- // Motionオプション適用時の矢印別の速度を取得(配列形式)
9792
- g_workObj.motionOnFrames = setMotionOnFrame();
9793
-
9794
9819
  // 最初のフレームで出現する矢印が、ステップゾーンに到達するまでのフレーム数を取得
9795
9820
  const firstFrame = (g_scoreObj.frameNum === 0 ? 0 : g_scoreObj.frameNum + g_headerObj.blankFrame);
9796
9821
  let arrivalFrame = getFirstArrivalFrame(firstFrame, speedOnFrame);
@@ -10838,7 +10863,7 @@ const getFountainTrace = (_frms, _spd) => {
10838
10863
  _frms[j] = Math.floor((10 - (j - C_MOTION_STD_POS - 1) * diff) * factor);
10839
10864
  }
10840
10865
  return _frms;
10841
- }
10866
+ };
10842
10867
 
10843
10868
  /**
10844
10869
  * 最初のフレームで出現する矢印が、ステップゾーンに到達するまでのフレーム数を取得
@@ -10850,7 +10875,7 @@ const getFirstArrivalFrame = (_startFrame, _speedOnFrame) => {
10850
10875
  let startY = 0;
10851
10876
  let frm = _startFrame;
10852
10877
 
10853
- while (g_posObj.distY - startY > 0) {
10878
+ while (g_scoreObj.distY - startY > 0) {
10854
10879
  startY += _speedOnFrame[frm];
10855
10880
  frm++;
10856
10881
  }
@@ -11198,7 +11223,7 @@ const getArrowStartFrame = (_frame, _speedOnFrame) => {
11198
11223
  motionFrm: C_MOTION_STD_POS
11199
11224
  };
11200
11225
 
11201
- while (g_posObj.distY - obj.startY > 0) {
11226
+ while (g_scoreObj.distY - obj.startY > 0) {
11202
11227
  obj.startY += _speedOnFrame[obj.frm - 1];
11203
11228
 
11204
11229
  if (_speedOnFrame[obj.frm - 1] !== 0) {
@@ -12790,6 +12815,7 @@ const mainInit = () => {
12790
12815
  currentArrow.y -= (g_workObj.currentSpeed * currentArrow.boostSpd +
12791
12816
  (g_workObj.motionOnFrames[boostCnt] || 0) * currentArrow.boostDir) * currentArrow.dir;
12792
12817
  $id(arrowName).top = wUnit(currentArrow.y);
12818
+ g_motionAlphaFunc.get(g_stateObj.motion)(arrowName, currentArrow);
12793
12819
  currentArrow.boostCnt--;
12794
12820
  }
12795
12821
  judgeMotionFunc[`${_name}${g_stateObj.autoAll}`](_j, arrowName, --currentArrow.cnt);
@@ -12940,8 +12966,10 @@ const mainInit = () => {
12940
12966
 
12941
12967
  // 移動
12942
12968
  if (g_workObj.currentSpeed !== 0) {
12969
+ currentFrz.prevY = currentFrz.y;
12943
12970
  currentFrz.y -= movY + (g_workObj.motionOnFrames[currentFrz.boostCnt] || 0) * currentFrz.dir * currentFrz.boostDir;
12944
12971
  $id(frzName).top = wUnit(currentFrz.y);
12972
+ g_motionAlphaFunc.get(g_stateObj.motion)(frzName, currentFrz);
12945
12973
  currentFrz.boostCnt--;
12946
12974
  }
12947
12975
  currentFrz.cnt--;
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2026/01/23 (v43.6.0)
8
+ * Revised : 2026/02/08 (v44.1.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -1218,9 +1218,16 @@ const g_settings = {
1218
1218
  speedNum: 0,
1219
1219
  speedTerms: [20, 5, 1],
1220
1220
 
1221
- motions: [C_FLG_OFF, `Boost`, `Hi-Boost`, `Brake`, `Compress`, `Fountain`],
1221
+ motions: [C_FLG_OFF, `Boost`, `Hi-Boost`, `Brake`, `Compress`, `Fountain`, `Magnet`],
1222
1222
  motionNum: 0,
1223
1223
 
1224
+ // 移動距離倍率 (Compress, Fountain, Magnetのみ倍率を変更)
1225
+ motionDistRates: [1, 1, 1, 1, 1.25, 3, 1.5],
1226
+ // 速度が逆転するときのアルファ値 (g_motionAlphaFuncで使用)
1227
+ motionAlpha: 0.625,
1228
+ // 移動距離倍率の補正を行う最小の初期倍速
1229
+ motionBoostFactorMinSpd: 5,
1230
+
1224
1231
  reverses: [C_FLG_OFF, C_FLG_ON],
1225
1232
  reverseNum: 0,
1226
1233
 
@@ -1563,9 +1570,34 @@ const g_motionFunc = new Map([
1563
1570
  ['Hi-Boost', _frms => getBoostTrace(_frms, g_stateObj.speed * 2)],
1564
1571
  ['Brake', _frms => getBrakeTrace(_frms)],
1565
1572
  ['Compress', _frms => getBoostTrace(_frms, g_stateObj.speed * 5 / 8, -1)],
1566
- ['Fountain', _frms => getFountainTrace(_frms, g_stateObj.speed * 2)],
1573
+ ['Fountain', _frms => getFountainTrace(_frms, g_stateObj.speed)],
1574
+ ['Magnet', _frms => getFountainTrace(_frms, g_stateObj.speed * 2)],
1575
+ ]);
1576
+
1577
+ /**
1578
+ * モーション適用中のアルファ値制御関数
1579
+ * @param {object} _obj 対象オブジェクト
1580
+ * @param {object} _property 対象オブジェクトのプロパティ情報 (g_attrObj[オブジェクト名])
1581
+ */
1582
+ const g_motionAlphaFunc = new Map([
1583
+ ['OFF', () => ``],
1584
+ ['Boost', () => ``],
1585
+ ['Hi-Boost', () => ``],
1586
+ ['Brake', () => ``],
1587
+ ['Compress', () => ``],
1588
+ ['Fountain', (_obj, _property) => motionAlphaToggle(_obj, _property)],
1589
+ ['Magnet', (_obj, _property) => motionAlphaToggle(_obj, _property)],
1567
1590
  ]);
1568
1591
 
1592
+ const motionAlphaToggle = (_obj, _property) => {
1593
+ const dir = (_property.y - _property.prevY) * _property.dir;
1594
+ if (($id(_obj).opacity === ``) && dir > 0) {
1595
+ $id(_obj).opacity = g_settings.motionAlpha;
1596
+ } else if (Number($id(_obj).opacity) === g_settings.motionAlpha && dir < 0) {
1597
+ $id(_obj).opacity = ``;
1598
+ }
1599
+ };
1600
+
1569
1601
  /**
1570
1602
  * PlayWindow適用関数
1571
1603
  */
@@ -2722,6 +2754,8 @@ const g_keyObj = {
2722
2754
  `sleft`, `sdown`, `sup`, `sright`],
2723
2755
  chara13_0: [`tleft`, `tdown`, `tup`, `tright`,
2724
2756
  `left`, `down`, `up`, `right`, `space`, `sleft`, `sdown`, `sup`, `sright`],
2757
+ chara13_1: [`left`, `down`, `up`, `right`, `space`, `sleft`, `sdown`, `sup`, `sright`,
2758
+ `tleft`, `tdown`, `tup`, `tright`,],
2725
2759
  chara14_0: [`sleftdia`, `sleft`, `sdown`, `sup`, `sright`, `srightdia`,
2726
2760
  `oni`, `left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`],
2727
2761
  chara14i_0: [`gor`, `space`, `iyo`, `left`, `down`, `up`, `right`,
@@ -2740,6 +2774,8 @@ const g_keyObj = {
2740
2774
  chara8_1: [`sleft`, `left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`],
2741
2775
  chara9i_1: [`left`, `down`, `up`, `right`, `space`, `sleft`, `sdown`, `sup`, `sright`],
2742
2776
  chara9h_1: [`1x`, `ax`, `zx`, `sx`, `hx`, `yx`, `ux`, `mx`, `ix`],
2777
+ chara11_1: [`left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`,
2778
+ `sleft`, `sdown`, `sup`, `sright`],
2743
2779
  chara17_1: [`aleft`, `adown`, `aup`, `aright`, `space`, `dleft`, `ddown`, `dup`, `dright`,
2744
2780
  `bleft`, `bdown`, `bup`, `bright`, `cleft`, `cdown`, `cup`, `cright`],
2745
2781
 
@@ -2796,6 +2832,8 @@ const g_keyObj = {
2796
2832
  color8_1_0: [2, 0, 1, 0, 2, 0, 1, 0],
2797
2833
  color9B_1_0: [0, 0, 0, 0, 2, 1, 1, 1, 1],
2798
2834
  color9i_1_0: [2, 2, 2, 2, 2, 0, 0, 0, 0],
2835
+ color11_1_0: [0, 1, 0, 2, 0, 1, 0, 3, 3, 3, 3],
2836
+ color13_1_0: [0, 0, 0, 0, 2, 3, 3, 3, 3, 4, 4, 4, 4],
2799
2837
  color17_1_0: [0, 0, 0, 0, 2, 4, 4, 4, 4, 1, 1, 1, 1, 3, 3, 3, 3],
2800
2838
 
2801
2839
  color5_2_0: [0, 0, 2, 0, 0],
@@ -2813,6 +2851,7 @@ const g_keyObj = {
2813
2851
  color17_0_1: [0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4],
2814
2852
 
2815
2853
  color9B_1_1: [0, 0, 1, 0, 2, 0, 0, 1, 0],
2854
+ color13_1_1: [0, 0, 3, 0, 2, 0, 0, 3, 0, 4, 4, 3, 4],
2816
2855
  color17_1_1: [1, 1, 1, 1, 2, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
2817
2856
 
2818
2857
  color9A_2_1: [4, 1, 3, 0, 2, 0, 3, 1, 4],
@@ -2856,6 +2895,8 @@ const g_keyObj = {
2856
2895
  shuffle5_1_0: [1, 0, 0, 0, 0],
2857
2896
  shuffle8_1_0: [2, 0, 0, 0, 1, 0, 0, 0],
2858
2897
  shuffle9i_1_0: [0, 0, 0, 0, 0, 1, 1, 1, 1],
2898
+ shuffle11_1_0: [1, 1, 1, 2, 1, 1, 1, 0, 0, 0, 0],
2899
+ shuffle13_1_0: [1, 1, 1, 1, 2, 3, 3, 3, 3, 0, 0, 0, 0],
2859
2900
  shuffle17_1_0: [0, 0, 0, 0, 1, 2, 2, 2, 2, 0, 0, 0, 0, 2, 2, 2, 2],
2860
2901
 
2861
2902
  shuffle5_2_0: [0, 0, 1, 0, 0],
@@ -2908,6 +2949,8 @@ const g_keyObj = {
2908
2949
  stepRtn5_1_0: [`onigiri`, 0, -90, 90, 180],
2909
2950
  stepRtn8_1_0: [`onigiri`, 0, -45, -90, `onigiri`, 90, 135, 180],
2910
2951
  stepRtn9i_1_0: [`monar`, `giko`, `c`, `morara`, `onigiri`, 0, -90, 90, 180],
2952
+ stepRtn11_1_0: [0, -45, -90, `onigiri`, 90, 135, 180, 0, -90, 90, 180],
2953
+ stepRtn13_1_0: [0, -90, 90, 180, `onigiri`, 0, -90, 90, 180, 0, -90, 90, 180],
2911
2954
  stepRtn17_1_0: [0, -45, -90, -135, `onigiri`, 45, 90, 135, 180,
2912
2955
  -22.5, -67.5, -112.5, -157.5, 22.5, 67.5, 112.5, 157.5],
2913
2956
 
@@ -2964,6 +3007,9 @@ const g_keyObj = {
2964
3007
  pos16i_0: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16],
2965
3008
  pos23_0: [0, 1, 2, 3, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26],
2966
3009
 
3010
+ pos11_1: [0, 1, 2, 3, 4, 5, 6, 7.25, 8.25, 9.25, 10.25],
3011
+ pos13_1: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9.25, 10.25, 11.25, 12.25],
3012
+
2967
3013
  // 基本パターン (キーコンフィグ)
2968
3014
  // - 順番はchara, stepRtnと対応している。
2969
3015
  // - 多次元配列内はステップに対応するキーコードもしくはコード名を示す。カンマ区切りで複数指定できる。
@@ -3000,8 +3046,10 @@ const g_keyObj = {
3000
3046
  keyCtrl8_1: [[`Enter`], [`S`], [`D`], [`F`], [`Space`], [`J`], [`K`], [`L`]],
3001
3047
  keyCtrl9A_1: [[`S`], [`D`], [`E`, `R`], [`F`], [`Space`], [`Left`], [`Down`], [`Up`], [`Right`]],
3002
3048
  keyCtrl9i_1: [[`A`], [`S`], [`D`], [`F`], [`Space`], [`Left`], [`Down`], [`Up`], [`Right`]],
3049
+ keyCtrl11_1: [[`S`], [`D`], [`F`], [`Space`], [`J`], [`K`], [`L`], [`Left`], [`Down`], [`Up`], [`Right`]],
3003
3050
  keyCtrl12_1: [[`Y`], [`U`, `I`], [`D8`, `D7`, `D9`], [`O`], [`Space`], [`B`], [`H`], [`N`, `M`], [`J`, `K`], [`Comma`], [`L`], [`Period`]],
3004
3051
  keyCtrl12i_1: [[`Q`], [`W`], [`E`], [`R`], [`T`], [`Y`], [`U`], [`I`], [`O`], [`P`], [`Ja-@`], [`Ja-[`]],
3052
+ keyCtrl13_1: [[`S`], [`D`], [`E`, `R`], [`F`], [`Space`], [`J`], [`K`], [`I`], [`L`], [`Left`], [`Down`], [`Up`], [`Right`]],
3005
3053
  keyCtrl14_1: [[`R`, `T`], [`Y`], [`U`, `I`], [`D8`, `D6`, `D7`, `D9`, `D0`], [`O`], [`BracketLeft`, `P`], [`Space`], [`B`], [`H`], [`N`, `M`], [`J`, `K`], [`Comma`], [`L`], [`Period`]],
3006
3054
  keyCtrl17_1: [[`A`], [`S`], [`D`], [`F`], [`Space`], [`J`], [`K`], [`L`], [`;`], [`Z`], [`X`], [`C`], [`V`], [`N`], [`M`], [`Comma`], [`Period`]],
3007
3055
 
@@ -3045,6 +3093,9 @@ const g_keyObj = {
3045
3093
  blank12i_0: 50,
3046
3094
  blank23_0: 50,
3047
3095
 
3096
+ blank11_1: 50,
3097
+ blank13_1: 50,
3098
+
3048
3099
  // 矢印群の倍率指定
3049
3100
  scale: 1,
3050
3101
  scale_def: 1,
@@ -3184,6 +3235,14 @@ const g_keyObj = {
3184
3235
  '---': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
3185
3236
  'Flat': [1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1],
3186
3237
  },
3238
+ scrollDir11_1: {
3239
+ '---': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
3240
+ 'Cross': [1, 1, 1, -1, -1, -1, -1, 1, 1, 1, 1],
3241
+ 'Split': [-1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1],
3242
+ 'Alternate': [1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1],
3243
+ 'Twist': [1, 1, -1, -1, -1, 1, 1, 1, -1, -1, 1],
3244
+ 'Asymmetry': [1, -1, 1, -1, -1, 1, -1, -1, 1, 1, -1],
3245
+ },
3187
3246
  scrollDir11L_0: {
3188
3247
  '---': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
3189
3248
  'Flat': [1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1],
@@ -3224,6 +3283,14 @@ const g_keyObj = {
3224
3283
  'Flat': [1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1],
3225
3284
  'Cross': [-1, -1, -1, -1, 1, 1, 1, 1, -1, -1, -1, -1, -1],
3226
3285
  },
3286
+ scrollDir13_1: {
3287
+ '---': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
3288
+ 'Cross': [1, 1, 1, 1, -1, -1, -1, -1, -1, 1, 1, 1, 1],
3289
+ 'Split': [-1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 1, 1, 1],
3290
+ 'Alternate': [1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1],
3291
+ 'Twist': [1, 1, -1, -1, -1, 1, 1, -1, -1, 1, 1, -1, -1],
3292
+ 'Asymmetry': [1, -1, -1, 1, -1, -1, 1, 1, -1, 1, -1, -1, 1],
3293
+ },
3227
3294
  scrollDir14_0: {
3228
3295
  '---': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
3229
3296
  'Flat': [1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1],
@@ -3299,10 +3366,11 @@ const g_keyObj = {
3299
3366
 
3300
3367
  minWidth5: 500,
3301
3368
  minWidth7i: 550,
3369
+ minWidth11: 650,
3302
3370
  minWidth11i: 650,
3303
3371
  minWidth11j: 650,
3304
3372
  minWidth12i: 675,
3305
- minWidth13: 650,
3373
+ minWidth13: 750,
3306
3374
  minWidth16i: 650,
3307
3375
  minWidth17: 825,
3308
3376
  minWidth23: 900,
@@ -3385,19 +3453,20 @@ const g_copyKeyPtn = {
3385
3453
  '12_4': `12i_0`,
3386
3454
  '12_5': `12i_1`,
3387
3455
 
3388
- '11_1': `11L_0`,
3389
- '11_2': `11i_0`,
3390
- '11_3': `12_0`,
3391
- '11_4': `12_1`,
3392
- '11_5': `12_2`,
3393
- '11_6': `12_3`,
3456
+ '11_2': `11L_0`,
3457
+ '11_3': `11i_0`,
3458
+ '11_4': `12_0`,
3459
+ '11_5': `12_1`,
3460
+ '11_6': `12_2`,
3461
+ '11_7': `12_3`,
3394
3462
 
3395
3463
  '11L_1': `11_0`,
3396
- '11L_2': `11_2`, // 1iiはcharaX_Yのマッピングが異なるため、11_2を流用
3397
- '11L_3': `12_0`,
3398
- '11L_4': `12_1`,
3399
- '11L_5': `12_2`,
3400
- '11L_6': `12_3`,
3464
+ '11L_2': `11_1`,
3465
+ '11L_3': `11_3`, // 1iiはcharaX_Yのマッピングが異なるため、11_3を流用
3466
+ '11L_4': `12_0`,
3467
+ '11L_5': `12_1`,
3468
+ '11L_6': `12_2`,
3469
+ '11L_7': `12_3`,
3401
3470
 
3402
3471
  '11W_1': `12_0`,
3403
3472
  '11W_2': `12_1`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "43.6.4",
3
+ "version": "44.1.0",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "./js/danoni_main.js",
6
6
  "scripts": {