danoniplus 33.3.0 → 33.4.1

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 : 2023/08/22
7
+ * Revised : 2023/08/28
8
8
  *
9
9
  * https://github.com/cwtickle/danoniplus
10
10
  */
11
- const g_version = `Ver 33.3.0`;
12
- const g_revisedDate = `2023/08/22`;
11
+ const g_version = `Ver 33.4.1`;
12
+ const g_revisedDate = `2023/08/28`;
13
13
 
14
14
  // カスタム用バージョン (danoni_custom.js 等で指定可)
15
15
  let g_localVersion = ``;
@@ -162,6 +162,7 @@ const g_workObj = {
162
162
  keyHitFlg: [],
163
163
  scrollDir: [],
164
164
  dividePos: [],
165
+ nonDefaultSc: false,
165
166
  };
166
167
 
167
168
  // 歌詞制御
@@ -1182,10 +1183,10 @@ const createEmptySprite = (_parentObj, _newObjId, { x = 0, y = 0, w = g_sWidth,
1182
1183
  * @param {string} _baseName
1183
1184
  * @param {number} _num
1184
1185
  */
1185
- const createMultipleSprite = (_baseName, _num) => {
1186
+ const createMultipleSprite = (_baseName, _num, { x = 0 } = {}) => {
1186
1187
  const sprite = createEmptySprite(divRoot, `${_baseName}`);
1187
1188
  for (let j = 0; j <= _num; j++) {
1188
- createEmptySprite(sprite, `${_baseName}${j}`);
1189
+ createEmptySprite(sprite, `${_baseName}${j}`, { x });
1189
1190
  }
1190
1191
  return sprite;
1191
1192
  };
@@ -1379,21 +1380,27 @@ const resetKeyControl = _ => {
1379
1380
  const clearWindow = (_redrawFlg = false, _customDisplayName = ``) => {
1380
1381
  resetKeyControl();
1381
1382
 
1383
+ // ボタン、オブジェクトをクリア (divRoot配下のもの)
1384
+ deleteChildspriteAll(`divRoot`);
1385
+
1386
+ // 拡張範囲を取得
1387
+ const diffX = (_customDisplayName === `Main` && g_workObj.nonDefaultSc ?
1388
+ g_headerObj.scAreaWidth * (g_headerObj.playingLayout ? 2 : 1) : 0);
1389
+
1390
+ const getLayerWithClear = (_name) => {
1391
+ const layer = document.getElementById(_name);
1392
+ const ctx = layer.getContext(`2d`);
1393
+ ctx.clearRect(0, 0, layer.width, g_sHeight);
1394
+ return ctx;
1395
+ };
1396
+
1382
1397
  if (document.querySelector(`#layer0`) !== null) {
1383
1398
 
1384
1399
  // レイヤー情報取得
1385
- const layer0 = document.querySelector(`#layer0`);
1386
- const l0ctx = layer0.getContext(`2d`);
1387
- layer0.width = g_sWidth;
1388
-
1389
- // 線画、図形をクリア
1390
- l0ctx.clearRect(0, 0, g_sWidth, g_sHeight);
1400
+ const l0ctx = getLayerWithClear(`layer0`);
1391
1401
 
1392
1402
  if (document.querySelector(`#layer1`) !== null) {
1393
- const layer1 = document.querySelector(`#layer1`);
1394
- const l1ctx = layer1.getContext(`2d`);
1395
- layer1.width = g_sWidth;
1396
- l1ctx.clearRect(0, 0, g_sWidth, g_sHeight);
1403
+ const l1ctx = getLayerWithClear(`layer1`);
1397
1404
 
1398
1405
  // 線画 (title-line)
1399
1406
  l1ctx.beginPath();
@@ -1409,61 +1416,45 @@ const clearWindow = (_redrawFlg = false, _customDisplayName = ``) => {
1409
1416
  l1ctx.stroke();
1410
1417
  }
1411
1418
  if (document.querySelector(`#layer2`) !== null) {
1412
- const layer2 = document.querySelector(`#layer2`);
1413
- const l2ctx = layer2.getContext(`2d`);
1414
- layer2.width = g_sWidth;
1415
- l2ctx.clearRect(0, 0, g_sWidth, g_sHeight);
1419
+ getLayerWithClear(`layer2`);
1416
1420
  }
1417
- }
1418
1421
 
1419
- // ボタン、オブジェクトをクリア (divRoot配下のもの)
1420
- deleteChildspriteAll(`divRoot`);
1422
+ if (_redrawFlg) {
1423
+ // 画面背景を指定 (background-color)
1424
+ $id(`canvas-frame`).width = `${g_sWidth + diffX}px`;
1425
+ layer0.width = g_sWidth + diffX;
1426
+ const grd = l0ctx.createLinearGradient(0, 0, 0, g_sHeight);
1427
+ if (!g_headerObj[`customBack${_customDisplayName}Use`]) {
1428
+ grd.addColorStop(0, `#000000`);
1429
+ grd.addColorStop(1, `#222222`);
1430
+ l0ctx.fillStyle = grd;
1431
+ l0ctx.fillRect(0, 0, g_sWidth + diffX, g_sHeight);
1432
+ }
1433
+ }
1434
+ }
1421
1435
 
1422
1436
  // 背景を再描画
1423
1437
  if (_redrawFlg) {
1424
- drawDefaultBackImage(_customDisplayName);
1425
- }
1426
- };
1438
+ g_btnAddFunc = {};
1439
+ g_btnDeleteFlg = {};
1440
+ g_cxtAddFunc = {};
1441
+ g_cxtDeleteFlg = {};
1427
1442
 
1428
- /**
1429
- * デフォルト背景画像の描画処理
1430
- * @param {string} _key メイン画面かどうか。Main:メイン画面、(空白):それ以外
1431
- */
1432
- const drawDefaultBackImage = _key => {
1433
-
1434
- g_btnAddFunc = {};
1435
- g_btnDeleteFlg = {};
1436
- g_cxtAddFunc = {};
1437
- g_cxtDeleteFlg = {};
1443
+ if (document.querySelector(`#layer0`) === null ||
1444
+ (!g_headerObj[`customBack${_customDisplayName}Use`] && !g_headerObj.defaultSkinFlg)) {
1438
1445
 
1439
- // レイヤー情報取得
1440
- if (document.querySelector(`#layer0`) !== null) {
1441
- const layer0 = document.querySelector(`#layer0`);
1442
- const l0ctx = layer0.getContext(`2d`);
1443
-
1444
- // 画面背景を指定 (background-color)
1445
- const grd = l0ctx.createLinearGradient(0, 0, 0, g_sHeight);
1446
- if (!g_headerObj[`customBack${_key}Use`]) {
1447
- grd.addColorStop(0, `#000000`);
1448
- grd.addColorStop(1, `#222222`);
1449
- l0ctx.fillStyle = grd;
1450
- l0ctx.fillRect(0, 0, g_sWidth, g_sHeight);
1451
-
1452
- if (!g_headerObj.defaultSkinFlg) {
1453
- createEmptySprite(divRoot, `divBack`);
1454
- }
1446
+ $id(`canvas-frame`).width = `${g_sWidth + diffX}px`;
1447
+ createEmptySprite(divRoot, `divBack`, { w: g_sWidth + diffX });
1455
1448
  }
1456
- } else {
1457
- createEmptySprite(divRoot, `divBack`);
1458
- }
1459
1449
 
1460
- // CSSスタイルの初期化
1461
- Object.keys(g_cssBkProperties).forEach(prop =>
1462
- document.documentElement.style.setProperty(prop, g_cssBkProperties[prop]));
1450
+ // CSSスタイルの初期化
1451
+ Object.keys(g_cssBkProperties).forEach(prop =>
1452
+ document.documentElement.style.setProperty(prop, g_cssBkProperties[prop]));
1463
1453
 
1464
- Object.keys(g_headerObj).filter(val => val.startsWith(`--`) && hasVal(g_headerObj[val])).forEach(prop =>
1465
- document.documentElement.style.setProperty(prop, getCssCustomProperty(prop, g_headerObj[prop])));
1454
+ Object.keys(g_headerObj).filter(val => val.startsWith(`--`) && hasVal(g_headerObj[val])).forEach(prop =>
1455
+ document.documentElement.style.setProperty(prop, getCssCustomProperty(prop, g_headerObj[prop])));
1466
1456
 
1457
+ }
1467
1458
  };
1468
1459
 
1469
1460
  /**
@@ -3267,6 +3258,16 @@ const headerConvert = _dosObj => {
3267
3258
  // プレイ中クレジットを表示しないエリアのサイズ(X方向)
3268
3259
  obj.customViewWidth = setVal(_dosObj.customViewWidth ?? _dosObj.customCreditWidth, 0, C_TYP_FLOAT);
3269
3260
 
3261
+ // ショートカットキーが既定値ではない場合の左右の拡張エリアのサイズ
3262
+ if (hasVal(_dosObj.scArea)) {
3263
+ const tmp = _dosObj.scArea.split(`,`);
3264
+ obj.scAreaWidth = setVal(tmp[0], 0, C_TYP_FLOAT);
3265
+ obj.playingLayout = tmp[1] !== `left`;
3266
+ } else {
3267
+ obj.scAreaWidth = g_presetObj.scAreaWidth ?? 0;
3268
+ obj.playingLayout = g_presetObj.playingLayout ?? true;
3269
+ }
3270
+
3270
3271
  // ジャストフレームの設定 (ローカル: 0フレーム, リモートサーバ上: 1フレーム以内)
3271
3272
  obj.justFrames = (g_isLocal) ? 0 : 1;
3272
3273
 
@@ -3696,6 +3697,22 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3696
3697
  return _str;
3697
3698
  };
3698
3699
 
3700
+ /**
3701
+ * divMaxX, posXの下段補完処理
3702
+ * ・divXの1番目の指定があるとき、その値を元に下段の位置を補完
3703
+ * 例) |div11x=7,b6|pos11x=0,1,2,3,4,5,6,b0,b1,b5,b6|
3704
+ * -> |div11x=7,13|pos11x=0,1,2,3,4,5,6,7,8,12,13|
3705
+ * @param {number} _num
3706
+ * @param {number} _divNum
3707
+ * @returns
3708
+ */
3709
+ const getKeyPosNum = (_num, _divNum = 0) => {
3710
+ if (!hasVal(_num) || (!_num.startsWith(`b`) && isNaN(parseFloat(_num)))) {
3711
+ return _num;
3712
+ }
3713
+ return _num.startsWith(`b`) ? parseFloat(_num.slice(1)) + _divNum : parseFloat(_num);
3714
+ }
3715
+
3699
3716
  /**
3700
3717
  * 新キー用複合パラメータ
3701
3718
  * @param {string} _key キー数
@@ -3891,9 +3908,6 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3891
3908
  // 矢印の回転量指定、キャラクタパターン (stepRtnX_Y)
3892
3909
  newKeyTripleParam(newKey, `stepRtn`);
3893
3910
 
3894
- // ステップゾーン位置 (posX_Y)
3895
- newKeyMultiParam(newKey, `pos`, toFloat);
3896
-
3897
3911
  // 各キーの区切り位置 (divX_Y)
3898
3912
  _dosObj[`div${newKey}`]?.split(`$`).forEach((tmpDiv, k) => {
3899
3913
  const tmpDivPtn = tmpDiv.split(`,`);
@@ -3909,10 +3923,19 @@ const keysConvert = (_dosObj, { keyExtraList = _dosObj.keyExtraList?.split(`,`)
3909
3923
  } else {
3910
3924
  // それ以外の場合は指定された値を適用(未指定時はその後で指定)
3911
3925
  g_keyObj[`div${ptnName}`] = setVal(tmpDivPtn[0], undefined, C_TYP_NUMBER);
3912
- g_keyObj[`divMax${ptnName}`] = setVal(tmpDivPtn[1], undefined, C_TYP_FLOAT);
3926
+ g_keyObj[`divMax${ptnName}`] = setVal(getKeyPosNum(tmpDivPtn[1], g_keyObj[`div${ptnName}`]), undefined, C_TYP_FLOAT);
3913
3927
  }
3914
3928
  });
3915
3929
 
3930
+ // ステップゾーン位置 (posX_Y)
3931
+ newKeyMultiParam(newKey, `pos`, toFloat, {
3932
+ loopFunc: (k, keyheader) => {
3933
+ g_keyObj[`${keyheader}_${k + dfPtnNum}`].forEach((val, j) => {
3934
+ g_keyObj[`${keyheader}_${k + dfPtnNum}`][j] = getKeyPosNum(String(val), g_keyObj[`div${newKey}_${k + dfPtnNum}`]);
3935
+ });
3936
+ },
3937
+ });
3938
+
3916
3939
  // charaX_Y, posX_Y, keyGroupX_Y, divX_Y, divMaxX_Yが未指定の場合はkeyCtrlX_Yを元に適用
3917
3940
  for (let k = 0; k < g_keyObj.minPatterns; k++) {
3918
3941
  setKeyDfVal(`${newKey}_${k + dfPtnNum}`);
@@ -4288,8 +4311,8 @@ const makeWarningWindow = (_text = ``, { resetFlg = false, backBtnUse = false }
4288
4311
  * お知らせウィンドウ(汎用)を表示
4289
4312
  * @param {string} _text
4290
4313
  */
4291
- const makeInfoWindow = (_text, _animationName = ``, _backColor = `#ccccff`) => {
4292
- const lblWarning = setWindowStyle(`<p>${_text}</p>`, _backColor, `#000066`, C_ALIGN_CENTER);
4314
+ const makeInfoWindow = (_text, _animationName = ``, { _backColor = `#ccccff`, _x = 0 } = {}) => {
4315
+ const lblWarning = setWindowStyle(`<p>${_text}</p>`, _backColor, `#000066`, C_ALIGN_CENTER, { _x: _x });
4293
4316
  lblWarning.style.pointerEvents = C_DIS_NONE;
4294
4317
 
4295
4318
  if (_animationName !== ``) {
@@ -4308,7 +4331,7 @@ const makeInfoWindow = (_text, _animationName = ``, _backColor = `#ccccff`) => {
4308
4331
  * @param {string} _textColor
4309
4332
  * @param {string} _align
4310
4333
  */
4311
- const setWindowStyle = (_text, _bkColor, _textColor, _align = C_ALIGN_LEFT) => {
4334
+ const setWindowStyle = (_text, _bkColor, _textColor, _align = C_ALIGN_LEFT, { _x = 0 } = {}) => {
4312
4335
 
4313
4336
  deleteDiv(divRoot, `lblWarning`);
4314
4337
 
@@ -4325,7 +4348,7 @@ const setWindowStyle = (_text, _bkColor, _textColor, _align = C_ALIGN_LEFT) => {
4325
4348
  const warnHeight = Math.min(150, Math.max(range.getClientRects().length,
4326
4349
  _text.split(`<br>`).length + _text.split(`<p>`).length - 1) * 21);
4327
4350
  const lbl = createDivCss2Label(`lblWarning`, _text, {
4328
- x: 0, y: 70, w: g_sWidth, h: warnHeight, siz: g_limitObj.mainSiz, backgroundColor: _bkColor,
4351
+ x: _x, y: 70, w: g_sWidth, h: warnHeight, siz: g_limitObj.mainSiz, backgroundColor: _bkColor,
4329
4352
  opacity: 0.9, lineHeight: `15px`, color: _textColor, align: _align, fontFamily: getBasicFont(),
4330
4353
  whiteSpace: `normal`,
4331
4354
  });
@@ -8602,6 +8625,9 @@ const getArrowSettings = _ => {
8602
8625
  g_workObj.lifeVal = Math.floor(g_workObj.lifeInit * 100) / 100;
8603
8626
  g_gameOverFlg = false;
8604
8627
  g_finishFlg = true;
8628
+ g_workObj.nonDefaultSc = g_headerObj.keyRetry !== C_KEY_RETRY || g_headerObj.keyTitleBack !== C_KEY_TITLEBACK;
8629
+ g_workObj.backX = (g_workObj.nonDefaultSc && g_headerObj.playingLayout ? g_headerObj.scAreaWidth : 0);
8630
+ g_workObj.playingX = g_headerObj.playingX + g_workObj.backX;
8605
8631
 
8606
8632
  if (g_stateObj.dataSaveFlg) {
8607
8633
  // ローカルストレージへAdjustment, HitPosition, Volume設定を保存
@@ -8716,24 +8742,24 @@ const mainInit = _ => {
8716
8742
  g_workObj.wordFadeFrame = [...Array(wordMaxLen)].fill(0);
8717
8743
 
8718
8744
  // 背景スプライトを作成
8719
- createMultipleSprite(`backSprite`, g_scoreObj.backMaxDepth);
8745
+ createMultipleSprite(`backSprite`, g_scoreObj.backMaxDepth, { x: g_workObj.backX });
8720
8746
 
8721
8747
  // ステップゾーン、矢印のメインスプライトを作成
8722
8748
  const mainSprite = createEmptySprite(divRoot, `mainSprite`, {
8723
- x: g_headerObj.playingX, y: g_posObj.stepY - C_STEP_Y, w: g_headerObj.playingWidth, transform: `scale(${g_keyObj.scale})`,
8749
+ x: g_workObj.playingX, y: g_posObj.stepY - C_STEP_Y, w: g_headerObj.playingWidth, transform: `scale(${g_keyObj.scale})`,
8724
8750
  });
8725
8751
 
8726
8752
  // 曲情報・判定カウント用スプライトを作成(メインスプライトより上位)
8727
- const infoSprite = createEmptySprite(divRoot, `infoSprite`, { x: g_headerObj.playingX, w: g_headerObj.playingWidth });
8753
+ const infoSprite = createEmptySprite(divRoot, `infoSprite`, { x: g_workObj.playingX, w: g_headerObj.playingWidth });
8728
8754
 
8729
8755
  // 判定系スプライトを作成(メインスプライトより上位)
8730
- const judgeSprite = createEmptySprite(divRoot, `judgeSprite`, { x: g_headerObj.playingX, w: g_headerObj.playingWidth });
8756
+ const judgeSprite = createEmptySprite(divRoot, `judgeSprite`, { x: g_workObj.playingX, w: g_headerObj.playingWidth });
8731
8757
 
8732
8758
  const tkObj = getKeyInfo();
8733
8759
  const [keyCtrlPtn, keyNum] = [tkObj.keyCtrlPtn, tkObj.keyNum];
8734
8760
 
8735
8761
  // マスクスプライトを作成 (最上位)
8736
- createMultipleSprite(`maskSprite`, g_scoreObj.maskMaxDepth);
8762
+ createMultipleSprite(`maskSprite`, g_scoreObj.maskMaxDepth, { x: g_workObj.backX });
8737
8763
 
8738
8764
  // カラー・モーションを適用するオブジェクトの種類
8739
8765
  const objList = (g_stateObj.dummyId === `` ? [``] : [`dummy`, ``]);
@@ -9000,6 +9026,23 @@ const mainInit = _ => {
9000
9026
  createDivCss2Label(`lblTime2`, `/ ${fullTime}`, Object.assign(g_lblPosObj.lblTime2, { display: g_workObj.musicinfoDisp })),
9001
9027
  );
9002
9028
 
9029
+ if (g_workObj.nonDefaultSc) {
9030
+ multiAppend(infoSprite,
9031
+ createDivCss2Label(`lblRetry`, `[${g_lblNameObj.l_retry}]`, Object.assign(g_lblPosObj.lblMainScHeader, { y: g_sHeight - 65 })),
9032
+ );
9033
+ multiAppend(infoSprite,
9034
+ createDivCss2Label(`lblRetrySc`, g_kCd[g_headerObj.keyRetry],
9035
+ Object.assign(g_lblPosObj.lblMainScKey, { y: g_sHeight - 50, fontWeight: g_headerObj.keyRetry === C_KEY_RETRY ? `normal` : `bold` })),
9036
+ );
9037
+ multiAppend(infoSprite,
9038
+ createDivCss2Label(`lblTitleBack`, `[${g_lblNameObj.l_titleBack}]`, Object.assign(g_lblPosObj.lblMainScHeader, { y: g_sHeight - 35 })),
9039
+ );
9040
+ multiAppend(infoSprite,
9041
+ createDivCss2Label(`lblTitleBackSc`, g_isMac ? `Shift+${g_kCd[g_headerObj.keyRetry]}` : g_kCd[g_headerObj.keyTitleBack],
9042
+ Object.assign(g_lblPosObj.lblMainScKey, { y: g_sHeight - 20, fontWeight: g_headerObj.keyTitleBack === C_KEY_TITLEBACK ? `normal` : `bold` })),
9043
+ );
9044
+ }
9045
+
9003
9046
  // ボーダーライン表示
9004
9047
  lifeBorderObj.textContent = g_workObj.lifeBorder;
9005
9048
  if (g_stateObj.lifeBorder === 0 || g_workObj.lifeVal === g_headerObj.maxLifeVal) {
@@ -9021,7 +9064,6 @@ const mainInit = _ => {
9021
9064
  jdgY[0] += g_diffObj.arrowJdgY;
9022
9065
  jdgY[1] += g_diffObj.frzJdgY;
9023
9066
  }
9024
- const jdgCombos = [`kita`, `ii`];
9025
9067
 
9026
9068
  jdgGroups.forEach((jdg, j) => {
9027
9069
  // キャラクタ表示
@@ -9060,7 +9102,7 @@ const mainInit = _ => {
9060
9102
  MCombo: [`combo`, 5], Kita: [`kita`, 7], Iknai: [`iknai`, 8], FCombo: [`combo`, 9],
9061
9103
  };
9062
9104
  Object.keys(jdgMainScoreObj).forEach(jdgScore =>
9063
- infoSprite.appendChild(makeCounterSymbol(`lbl${jdgScore}`, g_headerObj.playingWidth - 110,
9105
+ infoSprite.appendChild(makeCounterSymbol(`lbl${jdgScore}`, g_headerObj.playingWidth - 110 + (g_workObj.nonDefaultSc ? g_headerObj.scAreaWidth : 0),
9064
9106
  g_cssObj[`common_${jdgMainScoreObj[jdgScore][0]}`], jdgMainScoreObj[jdgScore][1] + 1, 0, g_workObj.scoreDisp)));
9065
9107
 
9066
9108
  // パーフェクト演出
@@ -9089,7 +9131,7 @@ const mainInit = _ => {
9089
9131
 
9090
9132
  divRoot.appendChild(
9091
9133
  createDivCss2Label(`lblReady`, readyHtml, {
9092
- x: g_headerObj.playingX + (g_headerObj.playingWidth - g_sWidth) / 2,
9134
+ x: g_workObj.playingX + (g_headerObj.playingWidth - g_sWidth) / 2,
9093
9135
  y: (g_sHeight + g_posObj.stepYR) / 2 - 75,
9094
9136
  w: g_sWidth, h: 50, siz: 40,
9095
9137
  animationDuration: `${g_headerObj.readyAnimationFrame / g_fps}s`,
@@ -9100,7 +9142,7 @@ const mainInit = _ => {
9100
9142
  }
9101
9143
 
9102
9144
  if (getMusicUrl(g_stateObj.scoreId) === `nosound.mp3`) {
9103
- makeInfoWindow(g_msgInfoObj.I_0004, `leftToRightFade`);
9145
+ makeInfoWindow(g_msgInfoObj.I_0004, `leftToRightFade`, { _x: g_workObj.playingX });
9104
9146
  }
9105
9147
 
9106
9148
  // ユーザカスタムイベント(初期)
@@ -5,7 +5,7 @@
5
5
  *
6
6
  * Source by tickle
7
7
  * Created : 2019/11/19
8
- * Revised : 2023/08/03 (v33.1.0)
8
+ * Revised : 2023/08/27 (v33.4.0)
9
9
  *
10
10
  * https://github.com/cwtickle/danoniplus
11
11
  */
@@ -400,6 +400,12 @@ const updateWindowSiz = _ => {
400
400
  musicInfoOFF: {
401
401
  x: 20, animationDuration: `4.0s`, animationName: `leftToRightFade`, animationFillMode: `both`,
402
402
  },
403
+ lblMainScHeader: {
404
+ x: g_sWidth + g_headerObj.scAreaWidth - 85, w: 80, h: 20, siz: 12, align: C_ALIGN_RIGHT,
405
+ },
406
+ lblMainScKey: {
407
+ x: g_sWidth + g_headerObj.scAreaWidth - 85, w: 80, h: 20, siz: 12, align: C_ALIGN_RIGHT,
408
+ },
403
409
 
404
410
  /** 結果画面 */
405
411
  lblRank: {
@@ -2853,6 +2859,9 @@ const g_lang_lblNameObj = {
2853
2859
  j_adj: `推定Adj`,
2854
2860
  j_excessive: `Excessive`,
2855
2861
 
2862
+ l_retry: `リトライ`,
2863
+ l_titleBack: `タイトルバック`,
2864
+
2856
2865
  helpUrl: `https://github.com/cwtickle/danoniplus/wiki/AboutGameSystem`,
2857
2866
  securityUrl: `https://github.com/cwtickle/danoniplus/security/policy`,
2858
2867
  },
@@ -2887,6 +2896,9 @@ const g_lang_lblNameObj = {
2887
2896
  j_adj: `Est-Adj.`,
2888
2897
  j_excessive: `Excessive`,
2889
2898
 
2899
+ l_retry: `Retry`,
2900
+ l_titleBack: `Go to title`,
2901
+
2890
2902
  helpUrl: `https://github.com/cwtickle/danoniplus-docs/wiki/AboutGameSystem`,
2891
2903
  securityUrl: `https://github.com/cwtickle/danoniplus-docs/wiki/SecurityPolicy`,
2892
2904
  },
@@ -1,7 +1,7 @@
1
1
  'use strict';
2
2
  /**
3
3
  * Dancing☆Onigiri 設定用jsファイル
4
- * Template Update: 2023/08/22 (v33.3.0)
4
+ * Template Update: 2023/08/27 (v33.4.0)
5
5
  *
6
6
  * このファイルでは、作品全体に対しての初期設定を行うことができます。
7
7
  * 譜面データ側で個別に同様の項目が設定されている場合は、譜面データ側の設定が優先されます。
@@ -278,6 +278,19 @@ g_presetObj.stockForceDelList = {
278
278
  mask: [],
279
279
  };
280
280
 
281
+ /**
282
+ * ショートカットキーが既定と異なる場合に表示する
283
+ * ショートカットキーエリア用に、プレイ時のみ左右に拡張するサイズの設定
284
+ * - 表示内容が収まるサイズは80px
285
+ * - 下記のplayingLayoutの設定により拡張幅が変わる (center: 左右両方拡張, left: 右のみ拡張)
286
+ */
287
+ //g_presetObj.scAreaWidth = 80;
288
+
289
+ /**
290
+ * プレイ画面の表示レイアウト (既定: center)
291
+ * - 現状影響する範囲は「scAreaWidth」の設定のみ
292
+ */
293
+ //g_presetObj.playingLayout = `left`;
281
294
 
282
295
  /*
283
296
  ------------------------------------------------------------------------
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "danoniplus",
3
- "version": "33.3.0",
3
+ "version": "33.4.1",
4
4
  "description": "Dancing☆Onigiri (CW Edition) - Web-based Rhythm Game",
5
5
  "main": "index.js",
6
6
  "scripts": {
@@ -1,166 +0,0 @@
1
- 'use strict';
2
- /**
3
- * Dancing☆Onigiri カスタム用jsファイル
4
- * その1:共通設定用
5
- *
6
- * このファイルは、作品個別に設定できる項目となっています。
7
- * 譜面データ側で下記のように作品別の外部jsファイルを指定することで、
8
- * danoni_main.js の中身を変えることなく設定が可能です。
9
- *
10
- * 設定例:
11
- * |customjs=danoni_custom-003.js|
12
- *
13
- * ・グローバル変数、div要素、関数は danoni_main.js のものがそのまま利用できます。
14
- * ・danoni_main.jsの変数を直接書き換えると、動かなくなることがあります。
15
- *  こまめのバックアップをおススメします。
16
- * ・ラベルなどのdiv要素を作る場合、「divRoot」の下にappendChild(div要素を追加)することで
17
- *  画面遷移したときにきれいに消してくれます。
18
- */
19
-
20
- /**
21
- * ローディング中処理
22
- * @param {event} _event ローディングプロパティ
23
- * _event.loaded 読込済バイト数
24
- * _event.total 読込総バイト数
25
- */
26
- function customLoadingProgress(_event) {
27
-
28
- }
29
-
30
- /**
31
- * タイトル画面 [Scene: Title / Melon]
32
- */
33
- function customTitleInit() {
34
-
35
- // バージョン表記
36
- g_localVersion = ``;
37
-
38
- }
39
-
40
- /**
41
- * 譜面選択(Difficultyボタン)時カスタム処理
42
- * @param {boolean} _initFlg 譜面変更フラグ (true:譜面変更選択時 / false:画面遷移による移動時)
43
- * @param {boolean} _canLoadDifInfoFlg 譜面初期化フラグ (true:譜面設定を再読込 / false:譜面設定を引き継ぐ)
44
- */
45
- function customSetDifficulty(_initFlg, _canLoadDifInfoFlg) {
46
-
47
- }
48
-
49
- /**
50
- * タイトル画面(フレーム毎表示) [Scene: Title / Melon]
51
- */
52
- function customTitleEnterFrame() {
53
-
54
- }
55
-
56
- /**
57
- * オプション画面(初期表示) [Scene: Option / Lime]
58
- */
59
- function customOptionInit() {
60
-
61
- }
62
-
63
- /**
64
- * 表示変更(初期表示) [Scene: Settings-Display / Lemon]
65
- */
66
- function customSettingsDisplayInit() {
67
-
68
- }
69
-
70
- /**
71
- * キーコンフィグ画面(初期表示) [Scene: KeyConfig / Orange]
72
- */
73
- function customKeyConfigInit() {
74
-
75
- }
76
-
77
- /**
78
- * 譜面読込画面 [Scene: Loading / Strawberry]
79
- * - この画面のみ、画面表示がありません。
80
- * - 処理が完了すると、自動的にメイン画面へ遷移します。
81
- */
82
- function customLoadingInit() {
83
-
84
- }
85
-
86
- /**
87
- * メイン画面(初期表示) [Scene: Main / Banana]
88
- */
89
- function customMainInit() {
90
-
91
- // ここにカスタム処理を記述する
92
- g_resultObj.exScore = 4000;
93
- g_resultObj.extra = `test`;
94
- }
95
-
96
- /**
97
- * メイン画面(フレーム毎表示) [Scene: Main / Banana]
98
- */
99
- function customMainEnterFrame() {
100
-
101
- }
102
-
103
- /**
104
- * 結果画面(初期表示) [Scene: Result / Grape]
105
- */
106
- function customResultInit() {
107
-
108
- }
109
-
110
- /**
111
- * 結果画面(フレーム毎表示) [Scene: Result / Grape]
112
- */
113
- function customResultEnterFrame() {
114
-
115
- }
116
-
117
- /**
118
- * 判定カスタム処理 (引数は共通で1つ保持)
119
- * @param {number} difFrame タイミング誤差(フレーム数)
120
- */
121
- /*
122
- // イイ
123
- function customJudgeIi(difFrame){
124
-
125
- }
126
-
127
- // シャキン
128
- function customJudgeShakin(difFrame){
129
-
130
- }
131
-
132
- // マターリ
133
- function customJudgeMatari(difFrame){
134
-
135
- }
136
-
137
- // ショボーン
138
- function customJudgeShobon(difFrame){
139
-
140
- }
141
-
142
- // ウワァン
143
- function customJudgeUwan(difFrame){
144
-
145
- }
146
-
147
- // キター
148
- function customJudgeKita(difFrame){
149
-
150
- }
151
-
152
- // イクナイ
153
- function customJudgeIknai(difFrame){
154
-
155
- }
156
-
157
- // ダミー矢印
158
- function customJudgeDummyArrow(difFrame){
159
-
160
- }
161
-
162
- // ダミーフリーズアロー
163
- function customJudgeDummyFrz(difFrame){
164
-
165
- }
166
- */