Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

空の矢印データを含む譜面にS-Ranをかけるとフルコン演出が通常より早く出てしまう問題の修正 #1044

Merged
merged 1 commit into from Apr 7, 2021

Conversation

suzme
Copy link
Contributor

@suzme suzme commented Apr 6, 2021

🔨 変更内容 / Details of Changes

  • 矢印データが空または不正なときarrowDataを空の配列にするようにします

🔖 関連Issue, 変更理由 / Related Issues, Reason for Changes

  • izkdicさんのツイート
  • |frzSpace_data=|のような空データではarrowDataの中身が[""]となり、S-Ran時この""が残ってしまいます
  • これにより、g_allArrowを数えるときそのキーを無視する条件を満たしてしまいます
    • parseFloat("")がNaNなのでisNaN(parseFloat(g_scoreObj.arrowData[j][0])) がtrue
  • 総ノート数が足りないため通常より早くフルコン演出が発動します

📷 スクリーンショット / Screenshot

📝 その他コメント / Other Comments

@codeclimate
Copy link

codeclimate bot commented Apr 6, 2021

Code Climate has analyzed commit 592d731 and detected 0 issues on this pull request.

View more on Code Climate.

@cwtickle cwtickle added the bug Something isn't working label Apr 6, 2021
@cwtickle
Copy link
Owner

cwtickle commented Apr 6, 2021

PRありがとうございます。
この件、わかりにくいので少し補足を入れます。

発生条件は、「S-Random」もしくは「S-Random+」で矢印・フリーズアローに偏りがある場合で
以下のような場合に発生する可能性があります。
特に、数の少ないフリーズアローや、特定の矢印に局所振りしている譜面
(12keyと思い込んでいる8keyなど)で発生するようです。

|frzLeft_data=300,320,540,560|
|frzDown_data=|

矢印を配列に格納する処理storeArrowDataでは上記を下記のように変換します。

frzData[0] = [300, 320, 540, 560];
frzData[1] = [``];  // 空が残る

このとき矢印数を計算する処理は下記で計算されます。
j = 1のとき、空データはisNaN(parseFloat(frzData[1][0]))trueになるので0になります。

「S-Random」もしくは「S-Random+」では単なる入れ替えでは無く矢印個別の入れ替えが起こるので
下記のように空の部分にもデータが入る可能性があります。(下記はイメージ)
storeArrowDataの後にS-Randomを適用する処理があるため

frzData[0] = [300, 320];
frzData[1] = [``, 540, 560];  // 空の後ろに矢印データが入る

このとき、矢印数を計算する処理に照らすと
j = 1のとき、空データはisNaN(parseFloat(frzData[1][0]))trueになるので0になります。

ただ、本来は後ろに数字データが入っている(540, 560)のでこの場合は0では無く2が正しいです。
これにより総フリーズアロー数が本来より少なくカウントされるので、
フルコン演出が通常より若干早く出てしまうことになります。

Copy link
Owner

@cwtickle cwtickle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. g_allArrow 及び g_allFrz の計算処理(下記)ですが、
    ツール値を計算するときにすでにある程度計算済みです。

単純な矢印の足し合わせなら下記で良いかもしれません。
ツール値表示で使っている、g_detailObjを利用します。
https://github.com/cwtickle/danoniplus/wiki/obj-v0008-g_detailObj

g_allArrow = g_detailObj.arrowCnt[g_stateObj.scoreId].reduce((p, x) => p + x);
g_allFrz = g_detailObj.frzCnt[g_stateObj.scoreId].reduce((p, x) => p + x);

// ライフ回復・ダメージ量の計算
// フリーズ始点でも通常判定させる場合は総矢印数を水増しする
if (g_headerObj.frzStartjdgUse) {
	g_allArrow += g_allFrz;  // すでに2で除算済みのため除算を取る
}
g_fullArrows = g_allArrow + g_allFrz;  // すでに2で除算済みのため除算を取る

ただ上記とは別にゴミデータ混入を防止する観点で、PRの変更は入れてよいと思います。
下記の記述を見直してください。

  1. _data !== undefined && _data !== `` の部分は hasVal(_data) で置き換え可能です。
    https://github.com/cwtickle/danoniplus/wiki/fnc-c0017-hasVal
  2. 他と揃えるため、 return [] の後にセミコロンを入れてください。

よろしくお願いします m(_ _)m

@cwtickle cwtickle added the need-to-fix-supportVer. サポートバージョンへの修正が必要な場合にラベル付け label Apr 6, 2021
@cwtickle cwtickle self-requested a review April 7, 2021 03:30
Copy link
Owner

@cwtickle cwtickle left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

コード集約がありそうなので、修正含めてこちらで巻き取ります。
この内容はマージします。

@cwtickle cwtickle merged commit 2d9ed64 into cwtickle:develop Apr 7, 2021
cwtickle added a commit that referenced this pull request Apr 7, 2021
[0404/empty-score] #1044 に対するコード見直し
@suzme suzme deleted the fix-empty-score branch September 5, 2021 05:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working need-to-fix-supportVer. サポートバージョンへの修正が必要な場合にラベル付け
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants