miririi6のブログ

RTAのこととかその他のこととか適当に

HPバーの計算式

ごあいさつ

こちらは Pokemon Past Generation Advent Calendar 2024 3日目の記事です。

adventar.org

「ネタあるけど枠埋まってるからいいや」と思ってたら空いたので入れさせていただきました。

 

結論

  • 少なくとも3-5世代においては、HPバーの長さは48ピクセル*1
  • 少なくとも3世代においては、"現在HP/最大HP*48(小数点以下切捨て、0以上1未満は1)"がHPバーの長さになると思われる。*2
  • バーの長さを判別するためには、なるべく高解像度でキャプチャして上からこのように画像をのせてやるのがおすすめ。(私の環境ではどうしてもちょっと滲む。)

この時のHPは"8緑"(長さで言うと32ピクセル

 

結論から話せとこの間小学校で習ったので結論から言いました。計算式は適当に仮説立てて計算したら一発で当たったので、特に紆余曲折とか無いです。

HPが49以上の敵に関しては1ピクセルの中に複数のHPが入っていることがあります。その場合は正確に特定することはできません。

 

HPバーと向き合うことにした背景

敵のHPバーには数値が表示されないのですが、RTAでは正確な数値を知ることで戦略を変えたいという場面がちょくちょくあります。
(例)「PP節約のため、確実に倒せるなら弱い技で代用したい」「低威力の命中安定技で倒せるか知りたい」「効果抜群・いまひとつのテキストを出したくないので、等倍技で倒せるか知りたい」「敵の回復ラインに入らないよう調整したい」等

 

しかし、ネットで調べてもHPバーの仕様に関する記事は見つかりませんでした。
ということで、以前は仕方なくエミュで一個一個調べては比較画像を作り、目印を覚えて判別していました。

体当たりを打つべきか、マドショを打つべきか判別する画像。Lの右端より左なら体当たり。

これでは比較画像作りも面倒だし、覚えるのも大変です。

ちなみに日本版はまだマシで、英語版では文字が左右にキュッとまとまってるので目印がなくなってさらに判別し辛いです。無理ゲーです。

かいりきを打つべきか、マドショを打つべきか判別する画像*3

ということで、

  • できれば計算式を特定して計算だけで分かるようにしたい。
  • 英語版でも現実的に見分ける手段が欲しい。

と思い考えた結果が上記の結論です。

これ乱数とか対戦とかやってる人にとって役に立つんですかね?ナイトヘッドでHPの個体値判別するとかならできるかなあ。

 

おわりに

個人的に、ポケモンwiki等で手に入らなくて困っている情報はまだあります。
例えば、ダメージ計算式の持ち物補正・ランク補正・バッジ補正がどの順番でかかるのかが分かりません。順番が変わると端数処理の関係でダメージが変わってくるので割と重要です。確定だと思ってたら実は乱数15/16でしたーなんてこともあり得るので。

こういったことも気が向いたときに調べて共有できたらいいなと思います。*4
いつか自分で解析できるようになりたいなあ。

 

終わり。

 

明日はサイファー氏によるポケスタ2の乱数についての記事です。

e52301147.hatenablog.com

 

*1:サファイアファイアレッドハートゴールド、ブラックで確認済み。

*2:何パターンか計算し、英語版サファイアで確認したら全てその通りになった。

*3:この場面ではかいりきのPPが切れていることが多く、判別できてもあんま役に立たない。

*4:前に調べたんだけど結果に矛盾が生じててよく分かんなくなってやめた気がする。

竪琴メタル 最適化のあれこれ

この記事ではすするさんのブログを基に、補足する点や最適化する上で意識すべき点を書いていきます。調整の書き方なども基本的にこちらを参考にしています。

susuru.hatenablog.jp

竪琴が安定してないという人は成功率優先で頑張ってください。

 

テキスト早送り

テキスト早送りの補正値は全て△9です。

 

すするさんの記事にも書かれていますが、ホイミ回復時のエフェクトやレベルアップ時のファンファーレ中にニュートラルを入れて長押しし直すと1回だけテキストが早く流れます。(見逃してる人が多そうなので一応書いた。)

 

メタルを倒した時の経験値獲得テキストも同じ操作で早くなります。倒している間に押し直せばいいので簡単です。経験値獲得とレベルアップの2回早送りすれば、補正値は△8になります。

 

また、レベルアップ中の1個1個のテキストも、文字が流れ始めてから流れ終わるまでの間にニュートラルを入れて押し直せば全部早くなります。回数分だけ補正値を△9します。
全部早送りは難しいので誰もやっていませんが、補正値調整がてら1,2回くらいやってもいいと思います。私はたまにやります。

 

薬草使用時も、「使う」を選択後即ニュートラルを入れて押し直すと早送りできます。道具欄一番上の薬草で行った場合、合計補正値0になります。

 

早送りによる短縮量は、経験値獲得時は9f、それ以外は(多分)全て29fです。
経験値獲得時だけ短縮量が少ないため、偶奇調整などで1回だけ早送りしたい時はレベルアップのテキストで早送りした方が良いです。

 

偶奇調整

補正値が奇数になった時、道具欄開閉による偶奇調整と戦闘画面でのB長押しによる偶奇調整があります。
これは分かっている前提で進めます。

ここでは、どちらで調整するのが早いかを考えていきます。

 

各調整方法の所要時間

カーソル移動 11f
道具欄開閉 81f
戦闘中B長押し 35f

 

補正値1の場合(3も同じ)
道具欄開閉で81f。
カーソル移動6回+B長押しで66+35=101f。

道具欄開閉の方が20f早い。

 

補正値5の場合(7,9も同じ)
道具欄開閉+カーソル移動4回で81+44=125f。
戦闘中B長押しで35f。

戦闘中B長押しの方が90f早い。

 

直感通りな感じですが、5未満なら道具欄開閉、5以上なら戦闘中B長押しがいいです。

 

偶奇調整(その場竪琴用)

補正値4の時は44f、補正値5の時は35fかかるため、実は補正値5の方が早いです。
つまりその場竪琴では5以上の補正値になる場合、積極的に奇数にした方が良いかもしれません。

 

偶奇調整(歩き竪琴用)

偶数が正義です。撃破時の早送りや回復を活用してなるべく偶数にします。

 

歩き中回復(歩き竪琴用)

戦闘後半歩以上歩いてから回復する場合、回復後の半歩も補正値±0になります。

活用例:補正値△2でエンカ域またぎ②をする時、歩き中に回復することで補正値0にする。

 

すするさんの記事のちょっとした補足・訂正(主に歩き竪琴用)

初回エンカの位置は記事のものより半歩左でいいです。

エンカ域またぎ①は開始位置は半歩左、到着位置は半歩上でいいので1マス分削減して補正値△2になります。

歩きで出た通常エンカウント後の歩きは、最初の半歩が±0にならず、△2(+8)になります。

サファイアRTA フウラン戦

あまりに不確定要素が多いため、すべての状況に対応することはできません。

日本晴れされたら即負けですし、光の壁を張られたらきついです。

前提

私の使っているRTAチャートを前提にしています。

手持ちは以下の通りです。

  • ラグラージLv38@しんぴのしずく 実数値133-111-78-82-76-64
  • キャモメ(確定ワンパン)
  • ケーシィ(確定ワンパン)
  • ポワルンLv25(ランダム個体貰ったまま)※必ず控えに置く

 

フウランのAIは以下の通りです。

  1. ランダムにターゲットを決める。
  2. 意味の無い行動をしないようにする。(晴れてるのに日本晴れ等)

  3. ソーラービーム以外に倒せる技があれば、それを選択する。

  4. ソーラービームで倒せるなら、ソーラービームを選択する。

  5. 最もダメージを与えられる技以外の攻撃技は使わないようにする。

  6. 残された技からランダムで選択する。

※倒せるかどうかは計算時に乱数生成して判断する。例えば「乱数12.5%で倒せる」とき、AIは12.5%の確率で「その行動で倒せる」と判断する。*1

 

参考資料

Tate & Liza AI (Sapphire) - Pastebin.com

 

乱数ごとのサイキネによる被ダメは以下の通り。

Dダウン時の被ダメは気が向いたら追加します。

ソラビの被ダメは以下の通り。

戦闘前準備

なるべくHPをルナトーンのサイキネ確定(54以下)にします。

できない場合もあります。

 

1T目

行動

スピーダー使用、ラグラージを回復。

HP40以下ならすごキズ。

HP41以上ならいいキズ。

キャモメが落ちた場合、ケーシィから先に出す。

意図

最優先事項は、ラグラージを落とさないことと日本晴れを打たせないこと。次点で光の壁や瞑想をされないこと。(光の壁と瞑想は同条件で等確率)

次ターンラグラージのHPが満タンだと、ソラビが乱数になるため日本晴れをされるリスクが生まれる。

両方にサイキネを打たれて落ちる確率も考えると、即負けに繋がる確率が最も低いのは上記のラインになった。(急所は考慮外)

 

2T目

行動

ラグラージ

ソルロックがソラビを溜めていなければ波乗り。

ソラビを溜めていればソルロックにダイビング。

となり

波乗りの場合

ソルロックのサイキネ圏内ならすごキズ。

ルナトーンのサイキネ圏内ならいいキズ。

どっちも圏外ならいいキズor適当に技選択。(キャモメなら水鉄砲。ポワルンなら雨ごい。)

 

ダイビングの場合

ソルロックのサイキネ圏内ならいいキズ。

ルナトーンのサイキネ圏内ならいいキズor適当に技選択。

どっちも圏外なら適当に技選択。

意図

波乗りを打つ場合は次のターンにソルロックを倒せるため、あまり気にせず回復していい。回復しておいた方がポワルンが行動しやすくなる。

ダイビングを選択したラグラージは次ターン確実にHPを保ったままになる。全回復はしない方が良い。

なお、このターンからポワルンが出る可能性があるが、ポワルンソルロックのサイキネを耐える確率が高いため、ソルロックにタゲられると日本晴れされる可能性が生じる。回避不能なので仕方ない。

 

3T目

行動

ラグラージ

(ダイビング中の場合、コマンド無し。)

となりがポワルン以外かつラグがルナトーンのサイキネ確定の場合、ダイビング。

それ以外の場合、なみのりソルロックを倒す。

となり

ダイビングする場合は回復しない。

すごキズor雨ごい。

意図

ルナトーンのHPゲージが以下(77~79)の時、シングル波乗りでほぼ倒せる。*2

ソルロックなみのり2回目を耐えられる確率は252/256。ほぼ無いと思っていい。

 

4T目以降

波乗りでルナトーンを倒しに行く。

*1:参考資料では「乱数の場合50%で判断する」(意訳)というように書いていますが、古い記事なので間違っている可能性が高いです。

*2:77は確定。78は93.75%。79は87.5%

みりいさんの配信環境

PC

3年半前にだいたい12万くらいで買った

 

CPU Intel Core i7-9700F 3.00GHz

RAM 16.0GB

GPU GeForce GTX 1660 SUPER

 

ディスプレイ

PCメイン BenQ GW2480 23.8インチ 1万5000円弱で買った

PCサブ ASUS VP248 24インチ 1万ちょいで買った

ゲーム用 Acer KG251QGbmiix 24.5インチ 1万5000円ちょいで買った

 

キャプチャボード

GC550 PLUS

GV-USB2/HQ(今は使ってない)

 

変換機など

OSSC(借り物)

Koryuu Transcorder

RetroTINK-5X Pro(借り物 買い取り予定)

RetroTINK-2X Pro(貸し出し中)

Wii2HDMI(適当なやつ)

Bitfunx製GCコンポーネントケーブル

コロンバスサークル製NewFC~GC用S+AV端子ケーブル

 

ゲーム機

AV仕様ファミリーコンピュータ

スーパーファミコン

NINTENDO64(故障)

ゲームキューブ(読み取り不良)+ゲームボーイプレーヤー

Wii(白)

WiiU

Switch

初期DS(偽トロ)

New3DSLL(偽トロ)

 

マイクなど

audio technica AT2020

Forcusrite Scarlett Solo (3rd Gen)

FC版DQ4 3章の鉄の前掛け売却価格について

06/12:ボケの確率1/32らしいと聞いたため大幅追記

06/14:大きなミスがあったため、ほぼ全て修正(平均の出し方が間違っていた)

 

初めに

初めはシャプナーさんの記事を参考に1687で売っていたが、計算方法が微妙に感じたので自分でも考えてみた。

手計算では無理そうなので、VBAで適当なシミュレータを作って回してみることにした。なお、ここでは往復回数は考えずに1秒当たりの利益を計算する。

サムネ用

前提

計算するには実際にかかる時間と価格の決定アルゴリズムが必要である。

 

時間については自分で計ってみた。あまり上手くはないが、もたついてると感じない程度には最適化したつもり。

・じじいに最後の1個売ってから補充して戻ってきて、7個全部一発で売った時のタイム:1分44.46秒 →7で割って1個当たり14.92秒

・1回のキャンセルによるタイムロス:3.68秒

 

売却価格の計算方法は以下のwikiに従い、ボケ率は1/32で計算する。

【ボンモール】 - ドラゴンクエスト大辞典を作ろうぜ!!第三版 Wiki*

ゲーム解析倶楽部 第01回 ドラゴンクエストⅣ ボンモールのじじい - ニコニコ動画

 

コード

赤文字を消すとボケ無しになる。

緑文字の数字が転売ボーダー

Sub maekake()
    Range("A1") = "価格"
    Range("B1") = "キャンセル回数"
    Range("C1") = "利益"
    Range("D1") = "時間"
    Range("E1") = "利益/時間"
    Range("F1") = "総利益"
    Range("G1") = "総時間"
    Range("H1") = "秒間平均利益"
    Const cansel_timeloss As Single = 3.68
    Const fastest_time As Single = 14.92
    Dim price As Integer
    Dim profit As Single
    Dim time As Single
    Dim bokechance As Integer
    Dim i As Long
    Dim k As Integer
    For i = 1 To 50000
        k = 0
        Do
            bokechance = WorksheetFunction.RandBetween(0, 31)
            If bokechance = 0 Then
                price = WorksheetFunction.RoundDown(1500 * WorksheetFunction.RandBetween(96, 128) / 64, 0)
                    Exit Do
            Else
                price = WorksheetFunction.RoundDown(1500 * WorksheetFunction.RandBetween(54, 80) / 64, 0)
                If price >= 1687 Then
                    Exit Do
                Else
                    k = k + 1
                End If
            End If
        Loop
        profit = price - 1507.14
        time = fastest_time + cansel_timeloss * k
        Cells(i + 1, 1) = price
        Cells(i + 1, 2) = k
        Cells(i + 1, 3) = profit
        Cells(i + 1, 4) = time
        Cells(i + 1, 5) = profit / time
    Next i
    Range("F2") = "=SUM(C2:C50001)"
    Range("G2") = "=SUM(D2:D50001)"
    Range("H2") = "=F2/G2"
End Sub

 

結果

各5万回行った平均

 

ボケありの場合

1664 15.96G/s

1687 16.10G/s

1710 16.01G/s

 

ボケ無しの場合

1640 12.30G/s

1664 12.37G/s

1687 12.30G/s

1710 12.03G/s

 

ということで、数値だけ見ると1664Gか1687Gが良いらしい。

結局、先駆者様たちの出してる数値がだいたい正しかったですね。お騒がせしました。

 

3往復でネネさんへの繋げ方を含めて考えると

最もオーソドックス(?)なモニスタ・760G・鉄槍回収で、ネネさん鉄槍スタートを目指すとすると、最初の前掛け1個を含めて前掛け21個or22個の転売で5924G稼げればいい計算になる。*1

以下、利益はキメつば代とボケを考慮しない値で書く。

 

1664G以上の平均利益は269.1Gで、21個で5651G、22個で5920Gとなる。22個なら足りる。

1687G以上の平均利益は280.8Gで、21個で5896G、22個で6177Gとなる。21個だとちょっと上振れが必要。

1710G以上の平均利益は292.5Gで、21個で6142G、22個で6435Gとなる。割と余裕あり。

 

ボケ込みなら1687Gが最適であることも踏まえると、1687G後手紙の21個転売にして、必要に応じて少しボーダーを上げ(場合によっては下げ)ながら、なるべく鉄槍を狙うのが良さそう。(個人的な好み。)

この場合、ボーダーより上で真ん中の1781Gを基準の0とし、そこからの差分で1687を-4、1875を+4とする。1回目前掛け購入開始で30360G、2回目で32000G、3回目33915Gくらいが標準的な値となる。これに対して最終的に合計+2してやれば鉄槍に届くという考え方ができそう。

端数ズレ怖いから3周目電卓の方がいいか。

 

前までのミス

前の計算方法では、「1個当たりの"時間当たり平均利益"の平均」を計算してしまっていたため、時間を分母とした平均値と大きな差異が生まれてしまっていました。

こんな中学数学レベルのミスをしてるとは思ってなかった。義務教育は偉大。

*1:木の帽子は全価格の平均、鉄盾と青銅は定価より高い値の平均で計算して計1654G、武器と拾った金で1977G、前掛けの購入費1500Gと女神像を合わせて30131G。ここからキメつば7個代175Gを引いて29956G。

日記6日目 2023/05/12

めっちゃサボった。多分明日も書かなそう。

期間空いてるので今日のことじゃないことも書きます。

 

1.アドコレエグゼ6の対戦を時々やってる

ファルザー版しかやってない。

現在ランクB。

 

2.マリみて5巻目読んでる

GWに実家帰ってる間読み進めてた。

もうちょっと早く本読めるようになりたい。

 

3.百合エロゲ『エヴァーメイデン』クリア

面白かった。

 

4.鏡Anyを復習中

15日にイベント出る。とりあえず裏で27は1回出した。

 

5.ルビサファのレジ系捕獲乱数調整作った

図鑑完成RTAで使うらしい。大体のことは調査済みだったので、僕はタイマーをどのくらいに調整したら上手くいくか確かめただけ。なお僕は絶対図鑑完成走らない。

youtu.be

 

6.サファイアちょっと走りたくなった

少し練習して、くそ運ゲーなの思い出して思いとどまった。

日記5日目 2023/04/13

ブログで毎回日付打つのだるい。自動で今日の日付入力したいな。そういうホットキー作れないかな。

→調べたら一瞬で出てきたからまるまるコピペで導入した。

https://tex2e.github.io/blog/keyboard/ahk-type-today-date

ちなみに他にもメインで使ってるGメールアドレスとかはahkで自動入力してる。

 

1.全然寝れなかった

なんとなくエナドリ飲んだのが良くなかったのかもしれない。結局朝9時に寝て昼1時に起きるっていう謎ムーブをした。いい感じにバランス取れて今夜は普通に寝れたらいいなあ。

 

2.『言語沼』読了

ゆる言語学ラジオという、youtubespotifyで配信されているラジオ番組がある。そのパーソナリティの2人が書いた本がこれ。

沼と題しているものの、内容は読みやすいライトなもの。

人に買うのをオススメするかと言われたら微妙な所だが、「ちょっとこれ読んでみて」って友達に貸して、「面白いと思ったらラジオもオススメだよ」ってなる感じの本だと思う。僕は貸す相手いないけど。

 

本家ラジオは追っかけ視聴中で、今は#130辺り。

 

3.PC操作でちょっとした知見を得た

URLの所クリックする時、ちょっと横にドラッグしたら全体選択しないで済む。

SRCでURL弄ってページ飛ぶことが多いから地味に便利。