固定されたツイートウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月4日【固定用ツイート (21/04/04)】 はじめに: https://twitter.com/umamusu_reveng/status/1377171137814097920… レース時間計算機 (スプレッドシート): https://twitter.com/umamusu_reveng/status/1377178874413338626… 解析まとめ (基本事項): https://twitter.com/umamusu_reveng/status/1378617316636680192… 解析まとめ (スピード関連): https://twitter.com/umamusu_reveng/status/1378617949259395073… 解析まとめ (HP/スキル):引用ツイートウマ娘 ゲーム仕様解析垢@umamusu_reveng · 4月4日【解析まとめ (その他)】 HP: https://twitter.com/umamusu_reveng/status/1377247489250619393… スキル: https://twitter.com/umamusu_reveng/status/1377997077532135429… スキル補足: https://twitter.com/umamusu_reveng/status/1378010154952630275…11129
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·1時間よって、現状実装されているスキルで複数回発動が現実的なのは、「弧線のプロフェッサー」「コーナー巧者○」「曲線のソムリエ」「コーナー加速○」「スリップストリーム」「遊びはおしまいっ!」の6つということになるかと思います。 誤った情報を発信してしまい、申し訳ありません。1515このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·1時間またこちらは逆に、基準クールダウン時間が 30[秒] のスキルであって、直線ランダム発動で無いスキルも、複数回発動のチャンスがある場合があります。 具体的には、「スリップストリーム」「遊びはおしまいっ!」といったスキルが複数回発動したという報告があるようです。11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·1時間【スキルの複数回発動について・訂正】 (特に「円弧のマエストロ」「コーナー回復○」について) 先日「円弧のマエストロ」「コーナー回復○」が複数回発動しうるとのツイートを行いましたが、これは誤りでした。 内部の処理としては、HP回復スキルは発動後にクールダウン時間が減少しません。187このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月6日これらの条件について、*それぞれ* class SkillTriggerCornerRandom によりトリガーが生成されます。 SkillTriggerCornerRandom::_InitDistance() では、最後に通過する該当コーナー中にトリガーを設定しています。1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月6日<技術解説> 「弧線のプロフェッサー」などの発動条件は「corner_random==1@corner_random==2@corner_random==3@corner_random==4」などとなっており、条件が OR で組み合わさっています。 よって、クールダウン中でなければ、これらのうちどれか1つの条件を満たすとスキルは発動します。13このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月6日「弧線のプロフェッサー」や「円弧のマエストロ」が複数回発動したという報告は、以上のメカニズムによってもたらされているものと思われます。 なお、以前説明したとおり、スキル発動の抽選はレース前に行われており、トリガー通過時に抽選が行われるわけではないためご注意ください。113このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月6日なお、「好転一息」などランダム直線発動のスキルについては、大筋は以前説明したもので合っているはずです。 1. どの直線で発動するかを (各直線の距離に関わらず) 一様ランダムに抽選する 2. 発動位置を抽選された直線内で一様ランダムに決める引用ツイートウマ娘 ゲーム仕様解析垢@umamusu_reveng · 4月2日なお、「円弧のマエストロ」などのスキルの発動位置は次のように定まります: 1. 前述の発動率計算を行い、スキルが発動するかしないかを決める 2. 1. で発動するとなった場合、発動可能な位置のうち、一様ランダムで発動位置を決める (この処理に賢さ値は影響しない)このスレッドを表示13このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月6日・クールダウン時間は、コーナーランダム発動スキルの中では先述した9つのスキルのみ、(30 × コース距離[m] / 1000) [秒] と定められている。なお、多くのスキルは「30」の部分が「500」に設定されており、複数回発動が実質行えないようになっている。12このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月6日・それぞれのコーナーについて、トリガーの発動位置はコーナー中に一様ランダムに定められる。 ・いずれかの発動位置を通過してトリガーが発火すると、次に発動しうるまでのクールダウンのカウントダウンが開始される。 ・クールダウン中は、トリガーを通過してもスキルは発動しない。12このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月6日コーナーランダム発動スキルの発動メカニズムは次のようになります: ・第1コーナー、第2コーナー、第3コーナー、第4コーナーのそれぞれについて、発動トリガーを1つずつ生成する。 ・このとき、同一レース中に同一コーナーを複数回通過する場合は、最後以外の通過ではトリガーは発火しない。214このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月6日・「弧線のプロフェッサー」「コーナー巧者○」「コーナー巧者× (未実装?)」 ・「曲線のソムリエ」「コーナー加速○」「コーナー加速× (未実装?)」 ・「円弧のマエストロ」「コーナー回復○」「コーナー回復× (未実装?)」136このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月6日【スキルの複数回発動について】 【「円弧のマエストロ」などコーナーランダム発動スキルの発動位置について訂正】 現状では一部のコーナーランダム発動系のスキルのみ、同一レース中に複数回発動する可能性があります。 該当するスキルは以下の9つです:14768このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月5日この RaceParameter::get_BaseSpeed() で得られるスピードなどの値は RaceParameter::.ctor() で代入されるやる気補正後のものですが、このやる気補正の数値は class MasterRaceMotivationRate から得られるものです。 データベースには 絶好調時の補正値 = 10400 などと記述されています。1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月5日<技術解説> これらのパラメータは HorseRaceInfo::InitBaseStatusAdjust() で初期化されています。 この関数内で呼び出されている HorseData::get_BaseSpeed() などの関数は、HorseData::.ctor() で初期化される class RaceParameter の get_BaseSpeed() などを呼び出しています。1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月5日なお、コース係数 (https://twitter.com/umamusu_reveng/status/1377625255167021062…) の算出時に用いられるのは「生パラメータ × やる気補正」の値となります。 また、すべてのパラメータは最小値 1.0、最大値 2000.0 にキャップされます (スキル補正前に1回、スキル補正後に1回の計2回)。引用ツイートウマ娘 ゲーム仕様解析垢@umamusu_reveng · 4月1日【コースによるスピード補正について】 中国語の解析記事 (https://bbs.nga.cn/read.php?tid=26010713…) およびその翻訳 (https://note.com/earman178/n/n19a8dc5c1b32…) において、スピード値にレースコースに応じた補正が掛かるとの記述がありますが、その内容に誤りがあると思われるため、ここに私の解析結果を載せます。このスレッドを表示2このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月5日[バ場補正 (スピード)] 不良 → -50、それ以外 → 0 [バ場補正 (パワー)] (芝) 良 → 0、それ以外 → -50 (ダート) 稍重 → -50、それ以外 → -100 [脚質補正] S → 1.1、A → 1、B → 0.85、C → 0.75、D → 0.6、E → 0.4、F → 0.2、G → 0.1 [育成補正] 育成モード時 → 400、それ以外 → 0134このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月5日[やる気係数] 絶好調 → 1.04、好調 → 1.02、普通 → 1.0、不調 → 0.98、絶不調 → 0.96 (ゲーム中の説明や公式動画などではそれぞれ 1.1、1.05、1.0、0.98、0.95 とされていますが、これらの値を見つけることができませんでした) [コース係数] こちらを参照:引用ツイートウマ娘 ゲーム仕様解析垢@umamusu_reveng · 4月1日【コースによるスピード補正について】 中国語の解析記事 (https://bbs.nga.cn/read.php?tid=26010713…) およびその翻訳 (https://note.com/earman178/n/n19a8dc5c1b32…) において、スピード値にレースコースに応じた補正が掛かるとの記述がありますが、その内容に誤りがあると思われるため、ここに私の解析結果を載せます。このスレッドを表示113このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月5日補正パワー値 = 生パワー値 × やる気係数 + バ場補正 + 育成補正 + スキル補正 補正根性値 = 生根性値 × やる気係数 + 育成補正 + スキル補正 補正賢さ値 = 生賢さ値 × やる気係数 × 脚質補正 + 育成補正 + スキル補正1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月5日【ステータス補正について】 各ステータスにはいくつかの条件による補正が入り、それぞれ次のようになります: 補正スピード値 = 生スピード値 × やる気係数 × コース係数 + バ場補正 + 育成補正 + スキル補正 補正スタミナ値 = 生スタミナ値 × やる気係数 + 育成補正 + スキル補正18このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月5日こちらのアカウントでは、仕様の質問、解析の要望なども受け付けております。 空いている時間での対応となる上、また必ずご要望にお応えできるとも限りませんが、気軽にご連絡していただけますと幸いです。 どなたでもDMを送れる設定としていますので、DMでのご連絡も可能です。212
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月4日【解析まとめ (その他)】 HP: https://twitter.com/umamusu_reveng/status/1377247489250619393… スキル: https://twitter.com/umamusu_reveng/status/1377997077532135429… スキル補足:引用ツイートウマ娘 ゲーム仕様解析垢@umamusu_reveng · 4月2日スキルの発動率について補足。 この発動率に関する計算は、レースが始まる *前* にすでに行われています。 「円弧のマエストロ」に限らず、すべてのスキルは「発動条件を満たす → 乱数を振って発動判定」 *ではなく* 、「乱数を振って発動判定 → 発動条件を満たす → 発動」のプロセスとなります。このスレッドを表示22
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月4日【解析まとめ (スピード関連)】 基準速度: https://twitter.com/umamusu_reveng/status/1377191733751017473… 基準目標速度: https://twitter.com/umamusu_reveng/status/1377198278299721734… 目標速度: https://twitter.com/umamusu_reveng/status/1378365854144897029… 現在の速度と加速度: https://twitter.com/umamusu_reveng/status/1378601008893370371… ラストスパート: https://twitter.com/umamusu_reveng/status/1377233900217372672… コースによるスピード値補正:引用ツイートウマ娘 ゲーム仕様解析垢@umamusu_reveng · 4月1日【コースによるスピード補正について】 中国語の解析記事 (https://bbs.nga.cn/read.php?tid=26010713…) およびその翻訳 (https://note.com/earman178/n/n19a8dc5c1b32…) において、スピード値にレースコースに応じた補正が掛かるとの記述がありますが、その内容に誤りがあると思われるため、ここに私の解析結果を載せます。このスレッドを表示3
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月4日【解析まとめ (基本事項)】 表示レース時間: https://twitter.com/umamusu_reveng/status/1377215032530903042… バ身: https://twitter.com/umamusu_reveng/status/1377190040292401156… フェーズ:引用ツイートウマ娘 ゲーム仕様解析垢@umamusu_reveng · 3月31日【フェーズ (phase) について】 レース中の現在の「スタートからの距離 / コース距離」に応じて「フェーズ (phase)」が定まります。フェーズは 0 ~ 3 の 4 通りの整数を取り得ます: ・0/6 ~ 1/6 → 0 (序盤) ・1/6 ~ 4/6 → 1 (中盤) ・4/6 ~ 5/6 → 2 (終盤) ・5/6 ~ 6/6 → 3 (ラスト)このスレッドを表示1
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月4日<技術解説> HorseRaceInfoSimulate::UpdateAI() でスキル等含めた最終的な速度の計算が行われています。 加速・減速の計算は HorseRaceInfo::_UpdateSelfSpeed() で行われており、加速度は HorseAccelCalculator::CalcAccelPerSec() および RaceUtil::CalcDeclPerSec() で計算されています。このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月4日例えば「逃げためらい」によりデバフを受けているとき、計算された速度が目標速度と一致していても、実際の速度はその速度からデバフの効果量を差し引いたものとなります。 ただしこの場合でも、ウマは目標速度で走っていると思い込んでいる (?) ため、加速は *行われません* 。16このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月4日2点目は、速度に直接影響を及ぼすスキル (現状では「逃げためらい」などのデバフスキルのみが該当します) が発動している場合は、計算された速度に直接加減算が行われます。12このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月4日実際の速度について注意点が2点。 1点目は、前を走るウマにブロックされている場合は、速度は「(0.988 (前を走るウマとの距離が 0) ~ 1.0 (前を走るウマとの距離が 2[m] 以上)) × 前を走るウマの速度」で上限が抑えられてしまいます。11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月4日[距離適性係数] S ~ D → 1.0、E → 0.6、F → 0.5、G → 0.4 また、スタートダッシュ時 (スタートから速度が「基準速度 × 0.85」に達するまでの間) は、加速時の加速度に 24.0[m/s^2] が加算されます。11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月4日[脚質係数 (フェーズ 0, 1, 2 および 3)] 逃げ → [1.0, 1.0, 0.996] 先行 → [0.985, 1.0, 0.996] 差し → [0.975, 1.0, 1.0] 追込 → [0.945, 1.0, 0.997] [バ場適性係数] S → 1.05、A → 1.0、B → 0.9、C → 0.8、D → 0.7、E → 0.5、F → 0.3、G → 0.111このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月4日<加速時> 加速度 = 0.0006 × sqrt(500.0 × パワー値) × 脚質係数 × バ場適性係数 × 距離適性係数 (+ スキル補正) [m/s^2] 注: 上り坂時は係数「0.0006」が「0.0004」になります <減速時加速度 [m/s^2]> フェーズ 0 → -1.2 フェーズ 1 → -0.8 フェーズ 2 ~ → -1.0 HP0以下時 (上書き) → -1.211このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月4日【実際の速度と加速度について】 各ウマ娘の実際の速度は、目標速度を目指して常に調整されています。 現在の速度が目標速度より遅い場合は加速、また逆に目標速度より速い場合は減速を行います。 加速時と減速時では加速度は異なり、それぞれ次のようになります:116このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月3日下り坂加速モードへの移行/終了の判定は HorseRaceAIBase::_UpdateDownSlopeAccel() で行われています。 目標速度の下限は HorseRaceInfo::UpdateMinSpeed() で計算されています。このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月3日<技術解説> そろそろこの項を書くのが億劫になっていますが、書くことで一番救われるのは自分なので頑張ります。 今回のメインルーチンは HorseTargetSpeedCalculatorRace::Update() です。 ポジションキープ周りは class HorsePositionKeepCalculator を足がかりにします。1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月3日なお、HP が 0 以下となってしまった場合は、目標速度は大幅に低下します: 目標速度 (HP 0 以下の場合) = 0.85 × 基準速度 + ((200.0 × 根性値) ^ 0.5) × 0.001 [m/s] ただし、HPを切らしてしまった時点で勝ちは望めないので、この計算式に実用上の価値はあまり無いでしょう。11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月3日下り坂であっても、下り坂加速モードに入らない限りは目標速度の加算は行われません。 また、下り坂加速モードは HP の減少量を抑える効果もあります。 下り坂の間は、下り坂加速モードへの移行および終了の判定が1秒おきに行われ、賢さ値に関わらず 20[%] の確率で下り坂加速モードは終了します。11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月3日坂補正は上り坂と下り坂で性質が異なります。 上り坂の際は坂の勾配に応じた減算となりますが、この減少量はパワーを上げることで軽減することができます。 下り坂の際は、賢さ × 0.04 [%] の確率で下り坂加速モードに移行し、坂の勾配に応じた目標速度が加算されます。11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月3日内側移動補正は、ウマがある閾値より外側を走っており、かつ内側が空いている際に加算される補正です。 スキル補正は、その名の通りスキルが発動した際に加減算される補正です。11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月3日それぞれのポジションキープモードに移行する条件は複雑で、なかなか解析が行えていません。 例えば、脚質が逃げのとき、1位であって、2位との差が 4.5[m] (=1.8[バ身]) 以内のとき、確率 20 × log10(賢さ × 0.1) [%] または掛かり状態のときに、スピードアップモードに移行する、などとなっています。13このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月3日ポジションキープ補正は、セクション 1 ~ 10 (コースはセクション 1 ~ 24 に均等に分割されています) の間に発動しうる補正で、次のようになっています: ポジションキープなし: 1.0 スピードアップモード: 1.04 追い抜きモード: 1.05 ペースアップモード: 1.04 ペースダウンモード: 0.91512このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月3日【目標速度 (TargetSpeed) について】 各ウマ娘の目標速度は次のように定まります: 目標速度 = 基準目標速度 × ポジションキープ補正 + 内側移動補正 + スキル補正 + 坂補正 基準目標速度 (通常時) について: https://twitter.com/umamusu_reveng/status/1377198278299721734… 基準目標速度 (スパート時) について:引用ツイートウマ娘 ゲーム仕様解析垢@umamusu_reveng · 3月31日【ラストスパートについて】 ラストスパートの始点と基準目標速度の計算は、フェーズ 2 に入ったタイミングで行われます。 基準目標速度上限(ラストスパート) = (基準目標速度(フェーズ 2) + 0.01 × 基準速度) × 1.05 + sqrt(500.0 × スピード値) × 距離適性係数 × 0.002このスレッドを表示14このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月2日スキルの発動率について補足。 この発動率に関する計算は、レースが始まる *前* にすでに行われています。 「円弧のマエストロ」に限らず、すべてのスキルは「発動条件を満たす → 乱数を振って発動判定」 *ではなく* 、「乱数を振って発動判定 → 発動条件を満たす → 発動」のプロセスとなります。38このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月2日スキルの確率発動判定は、SkillBase::LotActivate() で行われています。発動率の計算は RaceUtil::CalcActivatePer() を呼び出して行っています。 「円弧のマエストロ」といったスキルの発動位置の計算については、class SkillTriggerDistanceBase などを参照ください。1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月2日<技術解説> 基準持続時間や効果量が10000で割られているというのは、SkillBase::SetupDetail() や SkillData::ProcessDetail() が Math::MasterInt2Float() (値を 1/10000 にする関数) を呼び出していることから分かります。 基準時間に コース距離 / 1000 を掛ける処理は SkillDetail::ctor() です。13このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月2日<スキル発動率の例> 賢さ値300 → 70.0[%] 賢さ値600 → 85.0[%] 賢さ値900 → 90.0[%] 賢さ値1200 → 92.5[%]11726このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月2日なお、「円弧のマエストロ」などのスキルの発動位置は次のように定まります: 1. 前述の発動率計算を行い、スキルが発動するかしないかを決める 2. 1. で発動するとなった場合、発動可能な位置のうち、一様ランダムで発動位置を決める (この処理に賢さ値は影響しない)374このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月2日スキルの発動率は以下の通りです: スキル発動率 (個々のスキル毎に判定) = max(100 - 9000 / 賢さ値, 20) [%]149このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月2日実際の持続時間は、(基準持続時間 × コース距離[m] / 1000) [s] となります。 また、(多くの公開されているまとめでは省略されてしまっていますが) "activate_lot" が 0 のスキルは条件を満たすと確定で発動しますが、"activate_lot" が 1 のスキルは賢さに応じて定まる確率で発動します。116このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月2日まずこの表の読み方について、"float_ability_time" (基準持続時間) や "float_ability_value" (効果量) は「10000」で割った値が基準となります。 <例> ハヤテ一文字: float_ability_time = 9000 → 基準持続時間 = 0.9[s]、float_ability_value = 3500 → 効果量 = 0.35[m/s]127このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月2日【スキルについて】 スキルについては、すでに解析値をまとめたスプレッドシートなどを公開している方がいますので、そちらをご存じの方も多いかもしれません (ここでは紹介しませんが、ローカルファイルを探すと特に暗号化もされていない状態でデータベースが保存されています) 。1818このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月1日また、それでは具体的にどのコースでどのパラメータが参照されているのかについては、画像のようになっています。 画像に含まれていないコースでは、補正は行われません (係数 = 1.0) 。322このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月1日2点目は、この加算値は私が解析できない「何らかの値」で除算されているという点です。 そのため、私にはこの加算値の上限が 0.4 であるという保証を行うことはできません。 (CourseSetStatusAdjuster::CalcSpeedCoef() でこの処理は行われています。猛者求ム)1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月1日1点目は、その加算される値に誤りがあり、正確には次ようになります: パラメータ (0)~300 → 加算値 0.05 パラメータ 301~600 → 加算値 0.1 パラメータ 601~900 → 加算値 0.15 パラメータ 901~(2000) → 加算値 0.2112このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月1日スピード値には、コース係数とでも呼ぶべき係数が掛けられる補正処理は確かに行われています。 コース係数の初期値は 1.0 ですが、レースコース (レース場、バ場、距離のセット) に応じて、0~2種類の特定のパラメータを参照し、そのパラメータがある閾値を超えていたら一定値が加算されます。12このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·4月1日【コースによるスピード補正について】 中国語の解析記事 (https://bbs.nga.cn/read.php?tid=26010713…) およびその翻訳 (https://note.com/earman178/n/n19a8dc5c1b32…) において、スピード値にレースコースに応じた補正が掛かるとの記述がありますが、その内容に誤りがあると思われるため、ここに私の解析結果を載せます。ウマ娘解析一部翻訳(速度計算式、加速度計算式、体力計算式)|エアーマン|note3/29 ⑮訂正 3/28 ご指摘いただいた修正点を踏まえて画像を一新。コメントの追加も行いました https://bbs.nga.cn/read.php?tid=26010713&rand=412 こちらの記述の一部を日本語に翻訳してまとめました 深夜に衝動的に作っただけなので、ミスも多いと思います 正確な情報は元ページをご覧ください またこの情報自体が間違っている可能性もあるのでご注意...note.com127このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日<技術解説> class HorseHpCalculator がHP計算に主に関わっています。初期HPは CalcInitialHp() で、秒間HP減少量は CalcDecHpPerSec() で計算が行われています。 ・関連する変数: "Hp" 内の変数全般11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日なおHP回復スキルは、金スキルおよび★3以上の固有スキルが初期HPの5.5%を、★2以下の固有スキルが初期HPの3.5%を、ノーマルスキルが初期HPの1.5%を回復させます。 初期HPにはコース距離が関わっているため、コース距離が長いほど回復スキルはより多くのスタミナに相当することになります。1613このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日また例によって解析の日本語訳 (https://note.com/earman178/n/n19a8dc5c1b32…) では、この根性係数が掛かるのはスパート時のみと記載されていますが、実際には フェーズ 2 以降のすべてのタイミングで乗算されます。ウマ娘解析一部翻訳(速度計算式、加速度計算式、体力計算式)|エアーマン|note3/29 ⑮訂正 3/28 ご指摘いただいた修正点を踏まえて画像を一新。コメントの追加も行いました https://bbs.nga.cn/read.php?tid=26010713&rand=412 こちらの記述の一部を日本語に翻訳してまとめました 深夜に衝動的に作っただけなので、ミスも多いと思います 正確な情報は元ページをご覧ください またこの情報自体が間違っている可能性もあるのでご注意...note.com125このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日ただし、フェーズ = 2, 3 の場合はこのHP減少量に根性係数が乗算されます: 根性係数 = 1.0 + (200 / sqrt(600.0 × 根性)) <根性係数の具体例> 根性200 → 1.577 根性400 → 1.408 根性600 → 1.333165このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日1秒あたりのHP減少量は次の通りです: 秒間HP減少量 = 20.0 × (現在速度[m/s] - 基準速度[m/s] + 12.0) ^ 2 / 144.0 × ウマ状態係数 × バ場状態係数 ウマ状態係数: 掛かり = 1.6、ポジションキープペースダウン = 0.6、その他 = 1.0 (下り坂加速モード時各0.4倍) バ場状態係数: 1.00 ~ 1.02134このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日【HPについて】 各ウマにはHPが設定されており、HPが0になると非常に遅い速度でしか走れなくなります。 まず、初期HPが次の計算式で与えられます: 初期HP = 0.8 × 脚質係数 × スタミナ値 + コース距離[m] 脚質係数: 逃げ = 0.95、先行 = 0.89、差し = 1.0、追込 = 0.99513036このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日[スパート距離] ・LastSpurtDistanceGoalBuffer = 60 ・lastSpurtDistanceMaxFromGoal = 100 [スパート候補選択 (賢さに関わる)] ・lastSpurtStep2PerVal1 = 15.0 ・lastSpurtStep2PerVal2 = 0.05このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日関連する変数: [基準目標速度] ・lastSpurtBaseTargetSpeedAddCoef = 0.01 ・baseTargetSpeedCoef = 1.05 ・LastSpurtTargetSpeedCoefSqrt = 500.0 ・addSpeedParamCoef = 0.002 ・lastSpurtSpeedDelta = 0.1 ・lastSpurtStep2SpeedDelta = 0.11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日<技術解説> HorseLastSpurtCalculator::CalcLastSpurt() がラストスパートの計算を行います。 そこから呼び出される CalcBaseTargetSpeedAndStatusSpeed() が基準目標速度の上限を計算します。 この関数は phase = 2 になると1回だけ HorseRaceAISimulate::UpdateLastSpurt() から呼び出されます。1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日ウマ娘の攻略の観点から言えば、フェーズ 2 に入った瞬間にラストスパートを掛けられるかがタイムに大きく影響します。 そのため、フェーズ 2 即スパートが掛けられる HP を確保することは非常に重要です。 ただし、それ以上に確保した分の HP は無駄になるため、一定以上のスタミナは必要ありません。122このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日最後に、これらの候補から何らかの処理を行って1つの候補を採用するのですが、この処理に賢さ値が絡んでいるという程度しか現状の私には解析できていません。 この処理は HorseLastSpurtCalculator::CalcSpurtDistanceSpeedDownRecursivelyNext() で行われています。猛者求ム。12このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日HP が不足する場合は、上限値 (ラストスパート時) から基準目標速度 (フェーズ 2) に至るまで 0.1 [m/s] ずつ速度を下げていき、それぞれの速度に対して HP が不足しないようスパート距離を計算し、ラストスパート候補として保存しておきます。21このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日ラストスパートの始点と基準目標速度の計算過程はやや複雑です。 まず、フェーズ 2 に入ったタイミングで、残りの距離すべてを基準目標速度上限で走っても HP (後述) が足りなくならない場合は、現在位置を始点として基準目標速度には上限値が採用されます。122このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日【ラストスパートについて】 ラストスパートの始点と基準目標速度の計算は、フェーズ 2 に入ったタイミングで行われます。 基準目標速度上限(ラストスパート) = (基準目標速度(フェーズ 2) + 0.01 × 基準速度) × 1.05 + sqrt(500.0 × スピード値) × 距離適性係数 × 0.002267このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日<技術解説> HorseRaceInfoSimulate::CalcFinishTime() で Global.FinishTimeCoef (=1.18) が掛けられています。このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日【表示されるレース時間について】 表示レース時間 = 実レース時間 × 1.18 です。 (つまり、2000[m] を常に 20.0[m/s] で走ると実レース時間は1分40秒となり、演出も1分40秒間行われるが、最後に表示されるレース時間のみ1分58秒となる)112このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日・関連する変数は次の通りです: PhaseEndBaseTargetSpeedCoef = 500.0 addSpeedParamCoef = 0.002 BaseTargetSpeedRandomMinusVal1 = -0.65 BaseTargetSpeedRandomMinusVal2 = 5500.0 BaseTargetSpeedRandomPlusVal1 = 5500.0このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日・HorseBaseTargetSpeedCalculator::CalcPhaseEndAdd() の値が phase = 2, 3 の場合に加算されます ・乱数の下限・上限は HorseBaseTargetSpeedCalculator::CalcMinusRandomRange(), HorseBaseTargetSpeedCalculator::CalcPlusRandomRange() で計算されています1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日<技術解説> HorseBaseTargetSpeedCalculator::CalcBaseTargetSpeedArray() がセクションごとの基準目標速度を前計算しています。 処理をすべて解説すると長くなってしまうので、要点のみ:1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日[乱数の具体例] 賢さ値 = 400 の場合 → 下限 = -0.533%、上限 = +0.117% 賢さ値 = 800 の場合 → 下限 = -0.373%、上限 = +0.277% つまり、特に フェーズ = 0, 1 の間は、スピード値ではなく *賢さ値* が高いほど基準目標速度が早くなります。11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日なお、実際の基準目標速度には「乱数 × 基準速度」が加算されます。 乱数はセクション (コース距離の 1/24) ごとに生成され、下限・上限は次のとおりです: 下限 = 上限 - 0.65 [%] 上限 = (賢さ値 / 5500) × log10(賢さ値 × 0.1) [%]11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日中国フォーラムの解析記事 (https://bbs.nga.cn/read.php?tid=26010713…) や、その翻訳 (https://note.com/earman178/n/n19a8dc5c1b32…) では「フェーズ = 2, 3」の式のみが記載されていますが、私が解析した限りでは「フェーズ = 0, 1」の場合はスピード値は基準目標速度に *影響しません* 。ウマ娘解析一部翻訳(速度計算式、加速度計算式、体力計算式)|エアーマン|note3/29 ⑮訂正 3/28 ご指摘いただいた修正点を踏まえて画像を一新。コメントの追加も行いました https://bbs.nga.cn/read.php?tid=26010713&rand=412 こちらの記述の一部を日本語に翻訳してまとめました 深夜に衝動的に作っただけなので、ミスも多いと思います 正確な情報は元ページをご覧ください またこの情報自体が間違っている可能性もあるのでご注意...note.com1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日差し → [0.938, 0.998, 0.994] 追込 → [0.931, 1.0, 1.0] [距離適性] S → 1.05、A → 1.0、B → 0.9、C → 0.8、D → 0.6、E → 0.4、F → 0.2、G → 0.11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日[フェーズ = 0, 1] 基準目標速度 = 基準速度 × 脚質係数 [フェーズ = 2, 3] 基準目標速度 = 基準速度 × 脚質係数 + sqrt(500.0 × スピード値) × 距離適性係数 × 0.002 [脚質係数 (フェーズ 0, 1, 2 および 3)] 逃げ → [1.0, 0.98, 0.962] 先行 → [0.978, 0.991, 0.975] (続く)11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日【基準目標速度 (BaseTargetSpeed) について】 各ウマについて、基準速度、脚質、フェーズ、賢さに応じて基準目標速度 (BaseTargetSpeed) が定まります。 賢さは乱数要素に絡むため、とりあえずその項を除外すると次のようになります:14このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日<技術解説> ここで言う基準速度とは、RaceInfo._baseSpeed を指しています。 この変数は、RaceInfo::InitBaseSpeed() によって「raceBaseSpeedBaseSpeed - (RaceCourseSet.Distance - raceBaseSpeedBaseDistance) / raceBaseSpeedDistanceRate」に初期化されています。このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日<具体例> コース距離 = 1200[m] → 基準速度 = 20.8[m/s] コース距離 = 2000[m] → 基準速度 = 20.0[m/s] コース距離 = 2500[m] → 基準速度 = 19.5[m/s]1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日【基準速度 (BaseSpeed) について】 コース距離に応じて、レース全体の基準速度 (BaseSpeed) が定まります。具体的な計算式は次の通りです: 基準速度 = 20.0 - (コース距離[m] - 2000) / 1000 [m/s]13このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日【バ身について】 1 [バ身] = 2.5 [m] です。 <技術解説> float RaceUtil::Distance2BashinFloat(float distance) { if (distance < 0.0) return 0.0; return distance / 2.5; }58
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日なお sectionDistance については、RaceInfo::ctor() にて CourseSectionDistance = RaceCourseSet.Distance / 24.0 として代入が行われています。このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日<技術解説> RacePhaseCalculator::GetPhaseByDistance() がフェーズの計算機です。 RacePhaseCalculator::Init() では、 PhaseMiddleStartDistance = 4.0 * sectionDistance, PhaseEndStartDistance = 16.0 * sectionDistance, PhaseLastStartDistance = 20.0 * sectionDistance と定義されています。1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日【フェーズ (phase) について】 レース中の現在の「スタートからの距離 / コース距離」に応じて「フェーズ (phase)」が定まります。フェーズは 0 ~ 3 の 4 通りの整数を取り得ます: ・0/6 ~ 1/6 → 0 (序盤) ・1/6 ~ 4/6 → 1 (中盤) ・4/6 ~ 5/6 → 2 (終盤) ・5/6 ~ 6/6 → 3 (ラスト)115このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日追加でもう1点。 本アカウントはリバースエンジニアリング行為そのものを広めるのは目的ではないため、リバースエンジニアリングの具体的な手法などについての質問・問い合わせについては一切お答えしない方針とさせていただきます。このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日ここから解析内容のツイートに移っていきたいと思いますが、「計算式はどうでもいいからシミュレータが欲しい!」という方のために、簡易レース時間計算機をスプレッドシートで用意しました。 ご自身のドライブにコピーしてからご利用ください。 https://docs.google.com/spreadsheets/d/182-Q7kl4wGft4WEVbJ8en9qmfTVsTHTQBcYgDCmAbZ0/edit?usp=sharing… #ウマ娘 #ウマ娘解析ウマ娘 簡易レース時間計算機シート1 使い方:,左上に表示されている「ファイル」→「コピーを作成」を選択し、ご自身のドライブに本スプレッドシートをコピーしてからご利用ください。 ・「入力欄」の内容を埋めると、「出力欄」にレース時間とラストスパート距離の計算結果が表示されます。 ・用いられている計算式は、あくまで「現状分かっているもの」となります。正確性などは保証しません。 ・他のウマの影響や、回復スキル以外のスキル、乱...docs.google.com419
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日ただし、利用規約が変更された場合や、Cygames社より連絡があった場合などは、予告なく本アカウントは削除される可能性があります。 またそのようなことがなくとも、飽きっぽい性格なため、アカウントの更新が突然途切れるかもしれません。予めご了承ください (?) 。11このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日また、こういったリバースエンジニアリング行為は、現状では利用規約でも特に禁じられていないというのが私の認識です。 そのため、法律上はもちろん、規約上も問題ないものという認識のもと、ツイートを行っていきます。(倫理上はどうかはともかくとして…)12このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日そのため、本アカウントに記載する情報を取得するにあたって、サーバーとの通信を監視したり、不正なポストを行うといったことは (現状では) 一切行っておりません。 公式に配布されている実行ファイルや、PC内に保存されるローカルファイルを、純粋にリバースエンジニアリングしています。1このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日特にウマ娘のレースについては、シミュレーションが「アプリ内」で行われているため、解析を行うことでゲーム仕様を正確に把握することが可能です。 なおアプリ内でシミュレーションが行われた後、何らかのハッシュ値をサーバーに送信しているため、チート等を行うとサーバー側で恐らく検知されます。111このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日【はじめに】 本アカウントで用いる「解析」という用語は、具体的にはアプリをリバースエンジニアリング (逆アセンブル・逆コンパイル) することを指します。 リバースエンジニアリングの是非については以下で説明を行いますが、このような解析に抵抗のある方はブラウザバックをおすすめします。112このスレッドを表示
ウマ娘 ゲーム仕様解析垢@umamusu_reveng·3月31日本アカウントは、Cygames社の「ウマ娘 プリティーダービー」のゲーム仕様について、私が自身で解析した内容をまとめることを目的としたものです。 現状では、解析情報は中国語のものがほとんどですが、真にトレーナーの役に立つ情報を日本語で発信できたらと考えています。 #ウマ娘 #ウマ娘解析2