diff --git a/js/danoni_main.js b/js/danoni_main.js index 03b31cfc..e9847918 100644 --- a/js/danoni_main.js +++ b/js/danoni_main.js @@ -8,7 +8,7 @@ * * https://github.com/cwtickle/danoniplus */ -const g_version = `Ver 10.5.1`; +const g_version = `Ver 11.0.0`; const g_revisedDate = `2019/12/14`; const g_alphaVersion = ``; @@ -2386,6 +2386,11 @@ function headerConvert(_dosObj) { g_stepY = (isNaN(parseFloat(_dosObj.stepY)) ? C_STEP_Y : parseFloat(_dosObj.stepY)); g_stepYR = (isNaN(parseFloat(_dosObj.stepYR)) ? C_STEP_YR : parseFloat(_dosObj.stepYR)); g_distY = g_sHeight - g_stepY + g_stepYR; + g_reverseStepY = g_distY - g_stepY - C_ARW_WIDTH; + + // 矢印・フリーズアロー判定位置補正 + g_diffObj.arrowJdgY = (isNaN(parseFloat(_dosObj.arrowJdgY)) ? 0 : parseFloat(_dosObj.arrowJdgY)); + g_diffObj.frzJdgY = (isNaN(parseFloat(_dosObj.frzJdgY)) ? 0 : parseFloat(_dosObj.frzJdgY)); // musicフォルダ設定 obj.musicFolder = setVal(_dosObj.musicFolder, `music`, C_TYP_STRING); @@ -2464,7 +2469,8 @@ function headerConvert(_dosObj) { obj.makerView = setVal(_dosObj.makerView, false, C_TYP_BOOLEAN); // オプション利用可否設定 - const usingOptions = [`motion`, `scroll`, `shuffle`, `autoPlay`, `gauge`, `appearance`]; + let usingOptions = [`motion`, `scroll`, `shuffle`, `autoPlay`, `gauge`, `appearance`]; + usingOptions = usingOptions.concat(g_displays); usingOptions.forEach(option => { obj[`${option}Use`] = setVal(_dosObj[`${option}Use`], @@ -2472,6 +2478,10 @@ function headerConvert(_dosObj) { setVal(g_presetSettingUse[option], true, C_TYP_BOOLEAN) : true), C_TYP_BOOLEAN); }); + g_displays.forEach(option => { + g_stateObj[`d_${option.toLowerCase()}`] = (obj[`${option}Use`] ? C_FLG_ON : C_FLG_OFF); + }); + // 別キーパターンの使用有無 obj.transKeyUse = setVal(_dosObj.transKeyUse, true, C_TYP_BOOLEAN); @@ -3942,15 +3952,9 @@ function createSettingsDisplayWindow(_sprite) { `[クリックでON/OFFを切替、灰色でOFF]`); document.querySelector(`#${_sprite}`).appendChild(sdDesc); - makeDisplayButton(`stepZone`, 0, 0); - makeDisplayButton(`judgement`, 1, 0); - makeDisplayButton(`lifeGauge`, 2, 0); - makeDisplayButton(`musicInfo`, 3, 0); - makeDisplayButton(`speed`, 0, 1); - makeDisplayButton(`color`, 1, 1); - makeDisplayButton(`lyrics`, 2, 1); - makeDisplayButton(`background`, 3, 1); - makeDisplayButton(`arrowEffect`, 4, 1); + g_displays.forEach((name, j) => { + makeDisplayButton(name, j % 5, Math.floor(j / 5)); + }); // --------------------------------------------------- // 矢印の見え方 (Appearance) @@ -3966,19 +3970,37 @@ function createSettingsDisplayWindow(_sprite) { function makeDisplayButton(_name, _heightPos, _widthPos) { const flg = g_stateObj[`d_${_name.toLowerCase()}`]; - const lnk = makeSettingLblCssButton(`lnk${_name}`, `${toCapitalize(_name)}`, _heightPos, _ => { - g_stateObj[`d_${_name.toLowerCase()}`] = (g_stateObj[`d_${_name.toLowerCase()}`] === C_FLG_OFF ? C_FLG_ON : C_FLG_OFF); - if (g_stateObj[`d_${_name.toLowerCase()}`] === C_FLG_OFF) { - lnk.classList.replace(g_cssObj.button_ON, g_cssObj.button_OFF); - } else { - lnk.classList.replace(g_cssObj.button_OFF, g_cssObj.button_ON); - } - }); - lnk.style.width = `170px`; - lnk.style.left = `calc(30px + 180px * ${_widthPos})`; - lnk.style.borderStyle = `solid`; - lnk.classList.add(`button_${flg}`); - displaySprite.appendChild(lnk); + + if (g_headerObj[`${_name}Use`]) { + const lnk = makeSettingLblCssButton(`lnk${_name}`, `${toCapitalize(_name)}`, _heightPos, _ => { + g_stateObj[`d_${_name.toLowerCase()}`] = (g_stateObj[`d_${_name.toLowerCase()}`] === C_FLG_OFF ? C_FLG_ON : C_FLG_OFF); + if (g_stateObj[`d_${_name.toLowerCase()}`] === C_FLG_OFF) { + lnk.classList.replace(g_cssObj.button_ON, g_cssObj.button_OFF); + } else { + lnk.classList.replace(g_cssObj.button_OFF, g_cssObj.button_ON); + } + }); + lnk.style.width = `170px`; + lnk.style.left = `calc(30px + 180px * ${_widthPos})`; + lnk.style.borderStyle = `solid`; + lnk.classList.add(`button_${flg}`); + displaySprite.appendChild(lnk); + } else { + displaySprite.appendChild(makeDisabledDisplayLabel(`lnk${_name}`, _heightPos, _widthPos, toCapitalize(_name))); + } + } + + /** + * 無効化用ラベル作成 + * @param {string} _id + * @param {number} _heightPos + * @param {string} _defaultStr + */ + function makeDisabledDisplayLabel(_id, _heightPos, _widthPos, _defaultStr) { + const lbl = createDivCssLabel(_id, 30 + 180 * _widthPos, C_LEN_SETLBL_HEIGHT * _heightPos, + 170, C_LEN_SETLBL_HEIGHT, C_SIZ_SETLBL, _defaultStr, g_cssObj.settings_Disabled); + lbl.style.textAlign = C_ALIGN_CENTER; + return lbl; } } @@ -6164,7 +6186,7 @@ function MainInit() { const stepRoot = createSprite(`mainSprite`, `stepRoot${j}`, g_workObj.stepX[j], - g_stepY + (g_distY - g_stepY - 50) * g_workObj.dividePos[j], + g_stepY + g_reverseStepY * g_workObj.dividePos[j], C_ARW_WIDTH, C_ARW_WIDTH); // 矢印の内側を塗りつぶすか否か @@ -6218,13 +6240,13 @@ function MainInit() { // ステップゾーンの代わり const stepBar0 = createColorObject(`stepBar`, ``, - 0, g_stepY + (g_distY - g_stepY - 50) * (g_stateObj.reverse === C_FLG_OFF ? 0 : 1), + 0, g_stepY + g_reverseStepY * (g_stateObj.reverse === C_FLG_OFF ? 0 : 1), g_sWidth - 50, 1, ``, `lifeBar`); stepBar0.classList.add(g_cssObj.life_Failed); mainSprite.appendChild(stepBar0); const stepBar1 = createColorObject(`stepBar`, ``, - 0, g_stepY + (g_distY - g_stepY - 50) * (g_stateObj.reverse === C_FLG_OFF ? 0 : 1) + C_ARW_WIDTH, + 0, g_stepY + g_reverseStepY * (g_stateObj.reverse === C_FLG_OFF ? 0 : 1) + C_ARW_WIDTH, g_sWidth - 50, 1, ``, `lifeBar`); stepBar1.classList.add(g_cssObj.life_Failed); mainSprite.appendChild(stepBar1); @@ -6246,7 +6268,7 @@ function MainInit() { // フリーズアローヒット部分 for (let j = 0; j < keyNum; j++) { const frzHit = createSprite(`mainSprite`, `frzHit${j}`, - g_workObj.stepX[j], g_stepY + (g_distY - g_stepY - 50) * g_workObj.dividePos[j], + g_workObj.stepX[j], g_stepY + g_reverseStepY * g_workObj.dividePos[j], C_ARW_WIDTH, C_ARW_WIDTH); frzHit.style.opacity = 0; if (isNaN(Number(g_workObj.arrowRtn[j]))) { @@ -6450,33 +6472,32 @@ function MainInit() { lblTime1.style.textAlign = C_ALIGN_RIGHT; infoSprite.appendChild(lblTime2); - // 判定キャラクタ表示:矢印 - const charaJ = createDivCssLabel(`charaJ`, g_sWidth / 2 - 200, g_sHeight / 2 - 50, - C_LEN_JDGCHARA_WIDTH, C_LEN_JDGCHARA_HEIGHT, C_SIZ_JDGCHARA, ``, g_cssObj.common_ii); - charaJ.style.textAlign = C_ALIGN_CENTER; - charaJ.setAttribute(`cnt`, 0); - judgeSprite.appendChild(charaJ); - - // コンボ表示:矢印 - const comboJ = createDivCssLabel(`comboJ`, g_sWidth / 2 - 50, g_sHeight / 2 - 50, - C_LEN_JDGCHARA_WIDTH, C_LEN_JDGCHARA_HEIGHT, C_SIZ_JDGCHARA, ``, g_cssObj.common_kita); - comboJ.style.textAlign = C_ALIGN_CENTER; - comboJ.setAttribute(`cnt`, 0); - judgeSprite.appendChild(comboJ); - - // 判定キャラクタ表示:フリーズアロー - const charaFJ = createDivCssLabel(`charaFJ`, g_sWidth / 2 - 100, g_sHeight / 2, - C_LEN_JDGCHARA_WIDTH, C_LEN_JDGCHARA_HEIGHT, C_SIZ_JDGCHARA, ``, g_cssObj.common_kita); - charaFJ.style.textAlign = C_ALIGN_CENTER; - charaFJ.setAttribute(`cnt`, 0); - judgeSprite.appendChild(charaFJ); - - // コンボ表示:フリーズアロー - const comboFJ = createDivCssLabel(`comboFJ`, g_sWidth / 2 + 50, g_sHeight / 2, - C_LEN_JDGCHARA_WIDTH, C_LEN_JDGCHARA_HEIGHT, C_SIZ_JDGCHARA, ``, g_cssObj.common_ii); - comboFJ.style.textAlign = C_ALIGN_CENTER; - comboFJ.setAttribute(`cnt`, 0); - judgeSprite.appendChild(comboFJ); + const jdgGroups = [`J`, `FJ`]; + const jdgX = [g_sWidth / 2 - 200, g_sWidth / 2 - 100]; + const jdgY = [g_sHeight / 2 - 60 + g_diffObj.arrowJdgY, g_sHeight / 2 + 10 + g_diffObj.frzJdgY]; + const jdgCombos = [`kita`, `ii`]; + + jdgGroups.forEach((jdg, j) => { + + // キャラクタ表示 + const charaJ = createDivCssLabel(`chara${jdg}`, jdgX[j], jdgY[j], + C_LEN_JDGCHARA_WIDTH, C_LEN_JDGCHARA_HEIGHT, C_SIZ_JDGCHARA, ``, g_cssObj.common_ii); + charaJ.style.textAlign = C_ALIGN_CENTER; + charaJ.setAttribute(`cnt`, 0); + judgeSprite.appendChild(charaJ); + + // コンボ表示 + const comboJ = createDivCssLabel(`combo${jdg}`, jdgX[j] + 150, jdgY[j], + C_LEN_JDGCHARA_WIDTH, C_LEN_JDGCHARA_HEIGHT, C_SIZ_JDGCHARA, ``, g_cssObj[`common_${jdgCombos[j]}`]); + comboJ.style.textAlign = C_ALIGN_CENTER; + judgeSprite.appendChild(comboJ); + + // Fast/Slow表示 + const diffJ = createDivCssLabel(`diff${jdg}`, jdgX[j] + 150, jdgY[j] + 25, + C_LEN_JDGCHARA_WIDTH, C_LEN_JDGCHARA_HEIGHT, 14, ``, g_cssObj.common_combo); + diffJ.style.textAlign = C_ALIGN_CENTER; + judgeSprite.appendChild(diffJ); + }); // パーフェクト演出 const finishView = createDivCssLabel(`finishView`, g_sWidth / 2 - 150, g_sHeight / 2 - 50, @@ -6486,21 +6507,15 @@ function MainInit() { // 判定系OFF設定 if (g_stateObj.d_judgement === C_FLG_OFF) { - document.querySelector(`#lblIi`).style.display = C_DIS_NONE; - document.querySelector(`#lblShakin`).style.display = C_DIS_NONE; - document.querySelector(`#lblMatari`).style.display = C_DIS_NONE; - document.querySelector(`#lblShobon`).style.display = C_DIS_NONE; - document.querySelector(`#lblUwan`).style.display = C_DIS_NONE; - document.querySelector(`#lblMCombo`).style.display = C_DIS_NONE; - - document.querySelector(`#lblKita`).style.display = C_DIS_NONE; - document.querySelector(`#lblIknai`).style.display = C_DIS_NONE; - document.querySelector(`#lblFCombo`).style.display = C_DIS_NONE; - - document.querySelector(`#comboJ`).style.display = C_DIS_NONE; - document.querySelector(`#charaJ`).style.display = C_DIS_NONE; - document.querySelector(`#comboFJ`).style.display = C_DIS_NONE; - document.querySelector(`#charaFJ`).style.display = C_DIS_NONE; + const hideObjs = [ + `Ii`, `Shakin`, `Matari`, `Shobon`, `Uwan`, `MCombo`, `Kita`, `Iknai`, `FCombo` + ]; + hideObjs.forEach(hideObj => { + document.querySelector(`#lbl${hideObj}`).style.display = C_DIS_NONE; + }); + jdgGroups.forEach(jdg => { + document.querySelector(`#diff${jdg}`).style.display = C_DIS_NONE; + }); } // 曲情報OFF @@ -6559,11 +6574,13 @@ function MainInit() { const matchKeys = g_workObj.keyCtrl; for (let j = 0; j < keyNum; j++) { - for (let k = 0; k < matchKeys[j].length; k++) { - if (_keyCode === matchKeys[j][k] && !g_workObj.keyHitFlg[j][k]) { + matchKeys[j].forEach((key, k) => { + if (_keyCode === key && !g_workObj.keyHitFlg[j][k] && !g_judgObj.lockFlgs[j]) { + g_judgObj.lockFlgs[j] = true; judgeArrow(j); + g_judgObj.lockFlgs[j] = false; } - } + }); } }, @@ -6905,7 +6922,7 @@ function MainInit() { const stepRoot = createSprite(`arrowSprite${dividePos}`, `${_name}${_j}_${_arrowCnt}`, g_workObj.stepX[_j], - g_stepY + (g_distY - g_stepY - 50) * dividePos + g_workObj.initY[g_scoreObj.frameNum] * boostSpdDir, + g_stepY + g_reverseStepY * dividePos + g_workObj.initY[g_scoreObj.frameNum] * boostSpdDir, C_ARW_WIDTH, C_ARW_WIDTH); stepRoot.setAttribute(`cnt`, g_workObj.arrivalFrame[g_scoreObj.frameNum] + 1); stepRoot.setAttribute(`boostCnt`, g_workObj.motionFrame[g_scoreObj.frameNum]); @@ -6980,8 +6997,8 @@ function MainInit() { const frzRoot = createSprite(`arrowSprite${dividePos}`, `${_name}${_j}_${_arrowCnt}`, g_workObj.stepX[_j], - g_stepY + (g_distY - g_stepY - 50) * dividePos + g_workObj.initY[g_scoreObj.frameNum] * boostSpdDir, - 50, 100 + frzLength); + g_stepY + g_reverseStepY * dividePos + g_workObj.initY[g_scoreObj.frameNum] * boostSpdDir, + C_ARW_WIDTH, C_ARW_WIDTH + frzLength); frzRoot.setAttribute(`cnt`, g_workObj.arrivalFrame[g_scoreObj.frameNum] + 1); frzRoot.setAttribute(`boostCnt`, g_workObj.motionFrame[g_scoreObj.frameNum]); frzRoot.setAttribute(`judgEndFlg`, `false`); @@ -7380,22 +7397,17 @@ function MainInit() { } // 判定キャラクタ消去 - let charaJCnt = document.querySelector(`#charaJ`).getAttribute(`cnt`); - if (charaJCnt > 0) { - document.querySelector(`#charaJ`).setAttribute(`cnt`, --charaJCnt); - if (charaJCnt === 0) { - document.querySelector(`#charaJ`).innerHTML = ``; - document.querySelector(`#comboJ`).innerHTML = ``; - } - } - let charaFJCnt = document.querySelector(`#charaFJ`).getAttribute(`cnt`); - if (charaFJCnt > 0) { - document.querySelector(`#charaFJ`).setAttribute(`cnt`, --charaFJCnt); - if (charaFJCnt === 0) { - document.querySelector(`#charaFJ`).innerHTML = ``; - document.querySelector(`#comboFJ`).innerHTML = ``; + jdgGroups.forEach(jdg => { + let charaJCnt = document.querySelector(`#chara${jdg}`).getAttribute(`cnt`); + if (charaJCnt > 0) { + document.querySelector(`#chara${jdg}`).setAttribute(`cnt`, --charaJCnt); + if (charaJCnt === 0) { + document.querySelector(`#chara${jdg}`).innerHTML = ``; + document.querySelector(`#combo${jdg}`).innerHTML = ``; + document.querySelector(`#diff${jdg}`).innerHTML = ``; + } } - } + }); // 曲終了判定 if (g_scoreObj.frameNum >= fullFrame) { @@ -7632,80 +7644,88 @@ function keyIsDown(_keyCode) { */ function judgeArrow(_j) { - if (!g_judgObj.lockFlgs[_j]) { - g_judgObj.lockFlgs[_j] = true; - - const currentNo = g_workObj.judgArrowCnt[_j]; - const stepDivHit = document.querySelector(`#stepHit${_j}`); - const judgArrow = document.querySelector(`#arrow${_j}_${currentNo}`); + const currentNo = g_workObj.judgArrowCnt[_j]; + const stepDivHit = document.querySelector(`#stepHit${_j}`); + const judgArrow = document.querySelector(`#arrow${_j}_${currentNo}`); + + const fcurrentNo = g_workObj.judgFrzCnt[_j]; + + if (judgArrow !== null) { + const difFrame = Number(judgArrow.getAttribute(`cnt`)); + const difCnt = Math.abs(judgArrow.getAttribute(`cnt`)); + const judgEndFlg = judgArrow.getAttribute(`judgEndFlg`); + const arrowSprite = document.querySelector(`#arrowSprite${judgArrow.getAttribute(`dividePos`)}`); + + if (difCnt <= g_judgObj.arrowJ[C_JDG_UWAN] && judgEndFlg === `false`) { + stepDivHit.style.top = `${parseFloat(judgArrow.getAttribute(`prevPosY`)) - + parseFloat(document.querySelector(`#stepRoot${_j}`).style.top) - 15}px`; + stepDivHit.style.opacity = 0.75; + stepDivHit.classList.remove(g_cssObj.main_stepDefault, g_cssObj.main_stepDummy, g_cssObj.main_stepIi, g_cssObj.main_stepShakin, g_cssObj.main_stepMatari, g_cssObj.main_stepShobon); + + if (difCnt <= g_judgObj.arrowJ[C_JDG_II]) { + judgeIi(difFrame); + stepDivHit.classList.add(g_cssObj.main_stepIi); + document.querySelector(`#diffJ`).innerHTML = displayDiff(difFrame, difCnt); + } else if (difCnt <= g_judgObj.arrowJ[C_JDG_SHAKIN]) { + judgeShakin(difFrame); + stepDivHit.classList.add(g_cssObj.main_stepShakin); + document.querySelector(`#diffJ`).innerHTML = displayDiff(difFrame, difCnt); + } else if (difCnt <= g_judgObj.arrowJ[C_JDG_MATARI]) { + judgeMatari(difFrame); + stepDivHit.classList.add(g_cssObj.main_stepMatari); + document.querySelector(`#diffJ`).innerHTML = displayDiff(difFrame, difCnt); + } else { + judgeShobon(difFrame); + stepDivHit.classList.add(g_cssObj.main_stepShobon); + } + stepDivHit.setAttribute(`cnt`, C_FRM_HITMOTION); - const fcurrentNo = g_workObj.judgFrzCnt[_j]; + arrowSprite.removeChild(judgArrow); + g_workObj.judgArrowCnt[_j]++; + return; + } + } - if (judgArrow !== null) { - const difFrame = Number(judgArrow.getAttribute(`cnt`)); - const difCnt = Math.abs(judgArrow.getAttribute(`cnt`)); - const judgEndFlg = judgArrow.getAttribute(`judgEndFlg`); - const arrowSprite = document.querySelector(`#arrowSprite${judgArrow.getAttribute(`dividePos`)}`); + const judgFrz = document.querySelector(`#frz${_j}_${fcurrentNo}`); - if (difCnt <= g_judgObj.arrowJ[C_JDG_UWAN] && judgEndFlg === `false`) { - stepDivHit.style.top = `${parseFloat(judgArrow.getAttribute(`prevPosY`)) - - parseFloat(document.querySelector(`#stepRoot${_j}`).style.top) - 15}px`; - stepDivHit.style.opacity = 0.75; - stepDivHit.classList.remove(g_cssObj.main_stepDefault, g_cssObj.main_stepDummy, g_cssObj.main_stepIi, g_cssObj.main_stepShakin, g_cssObj.main_stepMatari, g_cssObj.main_stepShobon); + if (judgFrz !== null) { + const difCnt = Math.abs(judgFrz.getAttribute(`cnt`)); + const judgEndFlg = judgFrz.getAttribute(`judgEndFlg`); + if (difCnt <= g_judgObj.frzJ[C_JDG_SFSF] && judgEndFlg === `false`) { + if (g_headerObj.frzStartjdgUse && + (g_workObj.judgFrzHitCnt[_j] === undefined || g_workObj.judgFrzHitCnt[_j] <= fcurrentNo)) { + const difFrame = Number(judgFrz.getAttribute(`cnt`)); if (difCnt <= g_judgObj.arrowJ[C_JDG_II]) { judgeIi(difFrame); - stepDivHit.classList.add(g_cssObj.main_stepIi); + document.querySelector(`#diffJ`).innerHTML = displayDiff(difFrame, difCnt); } else if (difCnt <= g_judgObj.arrowJ[C_JDG_SHAKIN]) { - judgeShakin(difFrame); - stepDivHit.classList.add(g_cssObj.main_stepShakin); + judgeShakin(difCnt); + document.querySelector(`#diffJ`).innerHTML = displayDiff(difFrame, difCnt); } else if (difCnt <= g_judgObj.arrowJ[C_JDG_MATARI]) { - judgeMatari(difFrame); - stepDivHit.classList.add(g_cssObj.main_stepMatari); + judgeMatari(difCnt); + document.querySelector(`#diffJ`).innerHTML = displayDiff(difFrame, difCnt); } else { - judgeShobon(difFrame); - stepDivHit.classList.add(g_cssObj.main_stepShobon); - } - stepDivHit.setAttribute(`cnt`, C_FRM_HITMOTION); - - arrowSprite.removeChild(judgArrow); - g_workObj.judgArrowCnt[_j]++; - - g_judgObj.lockFlgs[_j] = false; - return; - } - } - - const judgFrz = document.querySelector(`#frz${_j}_${fcurrentNo}`); - - if (judgFrz !== null) { - const difCnt = Math.abs(judgFrz.getAttribute(`cnt`)); - const judgEndFlg = judgFrz.getAttribute(`judgEndFlg`); - - if (difCnt <= g_judgObj.frzJ[C_JDG_SFSF] && judgEndFlg === `false`) { - if (g_headerObj.frzStartjdgUse) { - if (g_workObj.judgFrzHitCnt[_j] === undefined || g_workObj.judgFrzHitCnt[_j] <= fcurrentNo) { - if (difCnt <= g_judgObj.arrowJ[C_JDG_II]) { - judgeIi(difCnt); - } else if (difCnt <= g_judgObj.arrowJ[C_JDG_SHAKIN]) { - judgeShakin(difCnt); - } else if (difCnt <= g_judgObj.arrowJ[C_JDG_MATARI]) { - judgeMatari(difCnt); - } else { - judgeShobon(difCnt); - } - g_workObj.judgFrzHitCnt[_j] = fcurrentNo + 1; - } + judgeShobon(difCnt); } - changeHitFrz(_j, fcurrentNo, `frz`); - g_judgObj.lockFlgs[_j] = false; - return; + g_workObj.judgFrzHitCnt[_j] = fcurrentNo + 1; } + changeHitFrz(_j, fcurrentNo, `frz`); + return; } - const stepDiv = document.querySelector(`#stepDiv${_j}`); - stepDiv.style.display = `inherit`; - g_judgObj.lockFlgs[_j] = false; } + const stepDiv = document.querySelector(`#stepDiv${_j}`); + stepDiv.style.display = `inherit`; +} + +/** + * タイミングズレを表示 + * @param {number} _difFrame + * @param {number} _difCnt + */ +function displayDiff(_difFrame, _difCnt) { + return ` + ${_difCnt <= 1 ? 'Just!!' : ((_difFrame > 1 ? `Fast ${_difCnt} Frame` : `Slow ${_difCnt} Frames`))}`; } /** @@ -7822,6 +7842,7 @@ function judgeShakin(difFrame) { function judgeMatari(difFrame) { changeJudgeCharacter(`matari`, C_JCR_MATARI); document.querySelector(`#comboJ`).innerHTML = ``; + document.querySelector(`#diffJ`).innerHTML = ``; finishViewing(); @@ -7833,16 +7854,23 @@ function judgeMatari(difFrame) { } } +/** + * ダメージ系共通処理 + */ +function judgeDamage() { + g_resultObj.combo = 0; + document.querySelector(`#comboJ`).innerHTML = ``; + document.querySelector(`#diffJ`).innerHTML = ``; + lifeDamage(); +} + /** * 判定処理:ショボーン * @param {number} difFrame */ function judgeShobon(difFrame) { changeJudgeCharacter(`shobon`, C_JCR_SHOBON); - g_resultObj.combo = 0; - document.querySelector(`#comboJ`).innerHTML = ``; - - lifeDamage(); + judgeDamage(); if (typeof customJudgeShobon === C_TYP_FUNCTION) { customJudgeShobon(difFrame); @@ -7858,10 +7886,7 @@ function judgeShobon(difFrame) { */ function judgeUwan(difFrame) { changeJudgeCharacter(`uwan`, C_JCR_UWAN); - g_resultObj.combo = 0; - document.querySelector(`#comboJ`).innerHTML = ``; - - lifeDamage(); + judgeDamage(); if (typeof customJudgeUwan === C_TYP_FUNCTION) { customJudgeUwan(difFrame); @@ -7923,8 +7948,10 @@ function makeFinishView(_text) { document.querySelector(`#finishView`).style.opacity = 1; document.querySelector(`#charaJ`).innerHTML = ``; document.querySelector(`#comboJ`).innerHTML = ``; + document.querySelector(`#diffJ`).innerHTML = ``; document.querySelector(`#charaFJ`).innerHTML = ``; document.querySelector(`#comboFJ`).innerHTML = ``; + document.querySelector(`#diffFJ`).innerHTML = ``; } function finishViewing() { diff --git a/js/lib/danoni_constants.js b/js/lib/danoni_constants.js index 08d6ac6b..ebea568f 100644 --- a/js/lib/danoni_constants.js +++ b/js/lib/danoni_constants.js @@ -278,6 +278,7 @@ const g_stateObj = { d_judgement: C_FLG_ON, d_lifegauge: C_FLG_ON, d_musicinfo: C_FLG_ON, + d_special: C_FLG_ON, d_color: C_FLG_ON, d_speed: C_FLG_ON, d_arroweffect: C_FLG_ON, @@ -325,6 +326,9 @@ let g_volumeNum = g_volumes.length - 1; let g_appearances = [`Visible`, `Hidden`, `Sudden`, `Slit`]; let g_appearanceNum = 0; +let g_displays = [`stepZone`, `judgement`, `lifeGauge`, `musicInfo`, `special`, + `speed`, `color`, `lyrics`, `background`, `arrowEffect`]; + // サイズ(後で指定) let g_sWidth; let g_sHeight; @@ -334,8 +338,14 @@ const C_STEP_Y = 70; const C_STEP_YR = 0; let g_stepY; let g_distY; +let g_reverseStepY; let g_stepYR; +const g_diffObj = { + arrowJdgY: 0, + frzJdgY: 0, +}; + // キーコンフィグカーソル let g_currentj = 0; let g_currentk = 0; @@ -579,6 +589,7 @@ const g_keyObj = { `cleft`, `dleft`, `cdown`, `ddown`, `cup`, `dup`, `cright`, `dright`], chara5_1: [`space`, `left`, `down`, `up`, `right`], + chara7_1: [`left`, `leftdia`, `down`, `space`, `up`, `rightdia`, `right`], chara9A_1: [`left`, `down`, `up`, `right`, `space`, `sleft`, `sdown`, `sup`, `sright`], chara9B_1: [`left`, `down`, `up`, `right`, `space`, `sleft`, `sdown`, `sup`, `sright`], chara9i_1: [`left`, `down`, `up`, `right`, `space`, `sleft`, `sdown`, `sup`, `sright`], @@ -626,6 +637,7 @@ const g_keyObj = { color17_0: [0, 1, 0, 1, 0, 1, 0, 1, 2, 3, 4, 3, 4, 3, 4, 3, 4], color5_1: [2, 0, 0, 0, 0], + color7_1: [0, 1, 0, 2, 0, 1, 0], color9A_1: [0, 0, 0, 0, 2, 3, 3, 3, 3], color9B_1: [0, 0, 0, 0, 2, 3, 3, 3, 3], color9i_1: [2, 2, 2, 2, 2, 0, 0, 0, 0], @@ -667,6 +679,7 @@ const g_keyObj = { shuffle17_0: [0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2], shuffle5_1: [1, 0, 0, 0, 0], + shuffle7_1: [0, 0, 0, 1, 0, 0, 0], shuffle9A_1: [0, 0, 0, 0, 1, 2, 2, 2, 2], shuffle9B_1: [0, 0, 0, 0, 1, 2, 2, 2, 2], shuffle9i_1: [0, 0, 0, 0, 0, 1, 1, 1, 1], @@ -711,6 +724,7 @@ const g_keyObj = { // - 末尾の番号をカウントアップさせることで実現できる。keyCtrlと合わせること // - 配列の数は、通常パターンと同数で無くてはいけない(keyCtrlも同様) stepRtn5_1: [`onigiri`, 0, -90, 90, 180], + stepRtn7_1: [0, -45, -90, `onigiri`, 90, 135, 180], stepRtn9A_1: [0, -90, 90, 180, `onigiri`, 0, -90, 90, 180], stepRtn9B_1: [0, -90, 90, 180, `onigiri`, 0, -90, 90, 180], stepRtn9i_1: [`monar`, `giko`, `c`, `morara`, `onigiri`, 0, -90, 90, 180], @@ -751,6 +765,7 @@ const g_keyObj = { div17_0: 17, div5_1: 5, + div7_1: 7, div9A_1: 9, div9B_1: 9, div9i_1: 9, @@ -790,6 +805,7 @@ const g_keyObj = { pos17_0: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16], pos5_1: [0, 1, 2, 3, 4], + pos7_1: [0, 1, 2, 3, 4, 5, 6], pos9A_1: [0, 1, 2, 3, 4, 5, 6, 7, 8], pos9B_1: [0, 1, 2, 3, 4, 5, 6, 7, 8], pos9i_1: [0, 1, 2, 3, 4, 5, 6, 7, 8], @@ -812,7 +828,7 @@ const g_keyObj = { // - 順番はchara, stepRtnと対応している。 // - 多次元配列内はステップに対応するキーコードを示す。カンマ区切りで複数指定できる。 keyCtrl5_0: [[37], [40], [38, 0], [39], [32, 0]], - keyCtrl7_0: [[83], [68, 0], [70], [32, 0], [74], [75, 0], [76]], + keyCtrl7_0: [[83], [68], [70], [32, 0], [74], [75], [76]], keyCtrl7i_0: [[90], [88], [67], [37], [40], [38, 0], [39]], keyCtrl8_0: [[83], [68, 0], [70], [32, 0], [74], [75, 0], [76], [13, 0]], keyCtrl9A_0: [[83], [68], [69, 82], [70], [32], [74], [75], [73, 0], [76]], @@ -832,7 +848,7 @@ const g_keyObj = { keyCtrl17_0: [[65], [90], [83], [88], [68], [67], [70], [86], [32], [78], [74], [77], [75], [188], [76], [190], [187]], keyCtrl5_0d: [[37], [40], [38, 0], [39], [32, 0]], - keyCtrl7_0d: [[83], [68, 0], [70], [32, 0], [74], [75, 0], [76]], + keyCtrl7_0d: [[83], [68], [70], [32, 0], [74], [75], [76]], keyCtrl7i_0d: [[90], [88], [67], [37], [40], [38, 0], [39]], keyCtrl8_0d: [[83], [68, 0], [70], [32, 0], [74], [75, 0], [76], [13, 0]], keyCtrl9A_0d: [[83], [68], [69, 82], [70], [32], [74], [75], [73, 0], [76]], @@ -856,6 +872,7 @@ const g_keyObj = { // - _0, _0dの数字部分をカウントアップすることで実現できる。 // - 配列数は合わせる必要はあるが、代替キーの数は _X, _Xdで揃っていれば合わせる必要はない。 keyCtrl5_1: [[32, 0], [37], [40], [38, 0], [39]], + keyCtrl7_1: [[83], [69], [70], [32, 71, 72], [74], [73], [76]], keyCtrl9A_1: [[83], [68], [69, 82], [70], [32], [37], [40], [38, 0], [39]], keyCtrl9B_1: [[83], [68], [69, 82], [70], [32], [74], [75], [73, 0], [76]], keyCtrl9i_1: [[65], [83], [68], [70], [32], [37], [40], [38, 0], [39]], @@ -868,6 +885,7 @@ const g_keyObj = { keyCtrl17_1: [[65], [83], [68], [70], [32], [74], [75], [76], [187], [90], [88], [67], [86], [78], [77], [188], [190]], keyCtrl5_1d: [[32, 0], [37], [40], [38, 0], [39]], + keyCtrl7_1d: [[83], [69], [70], [32, 71, 72], [74], [73], [76]], keyCtrl9A_1d: [[83], [68], [69, 82], [70], [32], [37], [40], [38, 0], [39]], keyCtrl9B_1d: [[83], [68], [69, 82], [70], [32], [74], [75], [73, 0], [76]], keyCtrl9i_1d: [[65], [83], [68], [70], [32], [37], [40], [38, 0], [39]], @@ -879,11 +897,11 @@ const g_keyObj = { keyCtrl15B_1d: [[87], [69], [51, 52], [82], [37], [40], [38, 0], [39], [83], [68], [70], [32], [74], [75], [76]], keyCtrl17_1d: [[65], [83], [68], [70], [32], [74], [75], [76], [187], [90], [88], [67], [86], [78], [77], [188], [190]], - keyCtrl5_2: [[37], [40], [32, 0], [38, 0], [39]], + keyCtrl5_2: [[68], [70], [32, 0], [74, 0], [75]], keyCtrl9A_2: [[65], [83], [68], [70], [32], [74], [75], [76], [187]], keyCtrl9B_2: [[83], [68], [69, 82], [70], [32], [37], [40], [38, 0], [39]], - keyCtrl5_2d: [[37], [40], [32, 0], [38, 0], [39]], + keyCtrl5_2d: [[68], [70], [32, 0], [74, 0], [75]], keyCtrl9A_2d: [[65], [83], [68], [70], [32], [74], [75], [76], [187]], keyCtrl9B_2d: [[83], [68], [69, 82], [70], [32], [37], [40], [38, 0], [39]], @@ -914,38 +932,10 @@ const g_keyObj = { keyTitleBack: 46, // 別キー - transKey5_0: '', - transKey7_0: '', - transKey7i_0: '', - transKey8_0: '', - transKey9A_0: '', - transKey9B_0: '', - transKey9i_0: '', - transKey11_0: '', - transKey11L_0: '', - transKey11W_0: '', - transKey12_0: '', - transKey13_0: '', - transKey14_0: '', - transKey14i_0: '', - transKey15A_0: '', - transKey15B_0: '', - transKey16i_0: '', - transKey17_0: '', - - transKey5_1: '', - transKey9A_1: '', transKey9B_1: '9A', - transKey9i_1: '', transKey11_1: '11L', transKey11L_1: '11', - transKey12_1: '', - transKey14_1: '', - transKey15A_1: '', - transKey15B_1: '', - transKey17_1: '', - transKey5_2: '', transKey9A_2: '9B', transKey9B_2: '9A', @@ -1010,6 +1000,14 @@ const g_keyObj = { 'Twist': [1, 1, -1, -1, 1, 1, -1], 'Asymmetry': [1, -1, 1, -1, -1, 1, -1], }, + scrollDir7_1: { + '---': [1, 1, 1, 1, 1, 1, 1], + 'Cross': [1, 1, -1, -1, -1, 1, 1], + 'Split': [1, 1, 1, -1, -1, -1, -1], + 'Alternate': [1, -1, 1, -1, 1, -1, 1], + 'Twist': [1, 1, -1, -1, 1, 1, -1], + 'Asymmetry': [1, -1, 1, -1, -1, 1, -1], + }, scrollDir7i_0: { '---': [1, 1, 1, 1, 1, 1, 1], 'Cross': [1, 1, -1, -1, -1, 1, 1],