Created
December 12, 2015 03:40
-
-
Save oyakodon/9a6f0b5b0716253ba246 to your computer and use it in GitHub Desktop.
デレステのアピール値やスコアの計算メソッドをまとめたもの
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
using System; | |
namespace CGSS_Calc | |
{ | |
/// <summary> | |
/// デレステのアピール値やスコアの計算メソッドをまとめたもの | |
/// 参考 : http://imascg-slstage-wiki.gamerch.com/%E3%82%A2%E3%83%94%E3%83%BC%E3%83%AB%E5%80%A4%E8%A8%88%E7%AE%97 | |
/// http://imascg-slstage-wiki.gamerch.com/%E3%82%B9%E3%82%B3%E3%82%A2%E8%A8%88%E7%AE%97 | |
/// 式 : | |
/// アピール値 = { (素のステータス) × (100 + 発揮される効果の和:単位%) × 0.01} の小数点以下を切り上げたもの ←Calc_Api [support = false] | |
/// サポメンアピール値 = { (アピール値) × 0.5} の小数点以下を切り上げたもの ← Calc_Api [support = true] | |
/// | |
/// (ノートあたりのスコア) = { (基礎値) × (判定倍率) × (コンボ倍率) × (特技倍率) を小数点以下四捨五入したもの } ← Calc_NpS | |
/// (基礎値) = (合計アピール値) × (曲係数) ÷ (総ノート数) | |
/// (判定係数) = { PERFECT:1.0, GREAT :0.7, NICE :0.4,BAD:0.1,MISS:0 } | |
/// (コンボ倍率) = (境界コンボ数) = { (総ノート数) × (割合) を小数点以下切り下げたもの } | |
/// 割合 コンボ倍率 | |
/// 0%~ 1.0 | |
/// 5%~ 1.1 | |
/// 10%~ 1.2 | |
/// 25%~ 1.3 | |
/// 50%~ 1.4 | |
/// 70%~ 1.5 | |
/// 80%~ 1.7 | |
/// 90%~ 2.0 | |
/// (特技倍率) = (発動中のスコアアップ系特技の内最も効果の高いもの) × (発動中のコンボボーナス系特技の内最も効果の高いもの) | |
/// ※ゲストアイドル・サポートメンバーの特技は一切関係し | |
/// </summary> | |
public class Calculation | |
{ | |
/// <summary> | |
/// アピール値を求める | |
/// </summary> | |
/// <param name="stat">ステータス値</param> | |
/// <param name="effect">発揮される効果の和(%) / 楽曲タイプによる効果(%)</param> | |
/// <param name="support">サポートメンバー式を... True: 適応する False: 適応しない</param> | |
/// <returns>小数点以下切り上げを行ったアピール値</returns> | |
public int Calc_Api(int stat, int effect, bool support) | |
{ | |
if (support) | |
{ | |
//サポメンなら | |
return (int)Math.Ceiling((stat * (100 + effect) * 0.01) * 0.5); | |
} | |
else | |
{ | |
return (int)Math.Ceiling(stat * (100 + effect) * 0.01); | |
} | |
} | |
/// <summary> | |
/// NpS(ノートあたりのスコア)を計算する | |
/// </summary> | |
/// <param name="SongLv">楽曲レベル</param> | |
/// <param name="judge_Mag">判定倍率</param> | |
/// <param name="skill_mag">特技倍率</param> | |
public int Calc_NpS(int SongLv, double judge_Mag, double skill_mag) | |
{ | |
var score = (Total_Api * Calc_Song_Coef(SongLv) / Total_Notes) * judge_Mag * Calc_Combo_Mag() * skill_mag; | |
return (int)Math.Round(score, MidpointRounding.AwayFromZero); | |
} | |
/// <summary> | |
/// 曲係数を計算する | |
/// Coefficient(係数) | |
/// </summary> | |
private double Calc_Song_Coef(int SongLv) | |
{ | |
var coef = 0.0; | |
#region 曲係数条件分岐 | |
switch (SongLv) | |
{ | |
case 5: coef = 1.0; break; | |
case 6: coef = 1.025; break; | |
case 7: coef = 1.05; break; | |
case 8: coef = 1.075; break; | |
case 9: coef = 1.1; break; | |
case 10: coef = 1.2; break; | |
case 11: coef = 1.225; break; | |
case 12: coef = 1.25; break; | |
case 13: coef = 1.275; break; | |
case 14: coef = 1.3; break; | |
case 15: coef = 1.4; break; | |
case 16: coef = 1.425; break; | |
case 17: coef = 1.45; break; | |
case 18: coef = 1.475; break; | |
case 19: coef = 1.5; break; | |
case 20: coef = 1.6; break; | |
case 21: coef = 1.65; break; | |
case 22: coef = 1.7; break; | |
case 23: coef = 1.75; break; | |
case 24: coef = 1.8; break; | |
case 25: coef = 1.85; break; | |
case 26: coef = 1.9; break; | |
case 27: coef = 1.95; break; | |
case 28: coef = 2; break; | |
case 29: coef = 2.1; break; | |
} | |
#endregion | |
return coef; | |
} | |
/// <summary> | |
/// コンボ倍率を計算する | |
/// </summary> | |
private double Calc_Combo_Mag() | |
{ | |
var combo_mag = 0.0; | |
for (var i = 0; i < Combo_Border.Length; ++i) | |
{ | |
if (Math.Round(Combo_Border[i, 0]) <= Current_Combo) | |
{ | |
combo_mag = Combo_Border[i, 1]; | |
break; | |
} | |
} | |
return combo_mag; | |
} | |
private double[,] Combo_Border; | |
/// <summary> | |
/// 境界コンボを計算する(合計ノート数設定後、一回呼び出すこと) | |
/// </summary> | |
private void Calc_Combo_Border() | |
{ | |
#region 境界コンボ定義 | |
Combo_Border = new double[,] | |
{ | |
{ (Current_Combo * 0.9), 2.0}, | |
{ (Current_Combo * 0.8), 1.7}, | |
{ (Current_Combo * 0.7), 1.5}, | |
{ (Current_Combo * 0.5), 1.4}, | |
{ (Current_Combo * 0.25), 1.3}, | |
{ (Current_Combo * 0.1), 1.2}, | |
{ (Current_Combo * 0.05), 1.1}, | |
{ (Current_Combo * 0.0), 1.0} | |
}; | |
#endregion | |
} | |
/// <summary> | |
/// 合計アピール値 | |
/// </summary> | |
private double Total_Api = 0; | |
/// <summary> | |
/// 合計ノート値 | |
/// </summary> | |
private int Total_Notes = 0; | |
/// <summary> | |
/// 現在のコンボ数 | |
/// </summary> | |
private int Current_Combo = 0; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment