Try   HackMD

【エメラルド】サイクリングロードTAを再走する話

この記事はPokémon Past Generation Advent Calendar 2023192日目分 の記事です。

前回のエメラルドのサイクリングロードTA自動化記事公開後、APSEAR氏よりこんな指摘を頂きました。

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

はい。ベストスコアが出たとか書きましたが実際はそんなことは無く、キチンと理論最速値があったわけですね。

自己ベストと読み替えれば嘘はついてないという見苦しい言い訳は止めにしましょう。再走です。

再走にあたって

今回の再走に当たっての変更点は以下の2点です。

  • 走行ルートの最適化
  • 自動化フレームワークの変更

前者に関しては前回のルートが最短経路を走っていなかったのでキチンと詰めましたというだけですね。修正後のルートは大体以下の通りです。

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

出典: Seaside Cycling Road ―From Bulbapedia, the community-driven Pokémon encyclopedia. CCライセンス 表示—非営利—継承 の許諾の元一部改変 2024/06/10閲覧
https://bulbapedia.bulbagarden.net/wiki/Seaside_Cycling_Road

また、PokeConだと、holdメソッドを利用した十字キー入力に癖があり、入力タイミングの最適化にはややトリッキーな実装を要します。

そこで今回は趣味と実益を兼ねて拙作の自動化FWである Project_Eryx態々引っ張り出して利用することにしました。

中で動かしたコードはこんな感じ。
@exportmacro("サイクリングロード走破TA")
def run_cycling_road_ta(cmd:Command):
    soft_reset(cmd)
    run_cycling_road(cmd)

def run_cycling_road(cmd:Command):
    cmd.press(Hat.DOWN,dur=1.35)

    cmd.hold(Hat.RIGHT)
    cmd.wait(1.5)
    cmd.hold(Hat.UP)
    cmd.wait(0.52)
    cmd.hold(Hat.RIGHT)
    cmd.wait(0.35)
    cmd.hold(Hat.DOWN)
    cmd.wait(1.42)

    cmd.hold(Hat.LEFT)
    cmd.wait(0.93)
    cmd.hold(Hat.DOWN)
    cmd.wait(1.6)

    cmd.hold(Hat.RIGHT)
    cmd.wait(0.38)
    cmd.hold(Hat.DOWN)
    cmd.wait(1.55)

    cmd.hold(Hat.RIGHT)
    cmd.wait(0.66)
    cmd.hold(Hat.DOWN)
    cmd.wait(1.5)
    cmd.release(Hat.CENTER)
    
    cmd.press(Button.A) # ぶつかった かいすう...
    cmd.press(Button.A) # かかった タイム...

def soft_reset(cmd:Command, battery_dried = True):
    """
    リセットする関数。リセット入力後フィールド画面に移行するまでを自動化します。
    """ 
    cmd.log("リセットします") 

    cmd.press(Button.A, Button.B, Button.PLUS, Button.X, dur=1.0, wait=4.5)
    cmd.press(Button.A, wait=1.0)# オープニングスキップ
    cmd.press(Button.A, wait=0.5)# プレタイトルスキップ
    cmd.press(Button.A, wait=3.0)# タイトルスキップ
    if battery_dried:
        cmd.press(Button.A, wait=2.5)# でんちぎれの ために...
        cmd.press(Button.A, wait=1.0) #とけいに かんけいする...
    cmd.press(Button.A, wait=2.4)# つづきから はじめる

結果

細かい調整の末、理論値を達成しました。

Image Not Showing Possible Reasons
  • The image was uploaded to a note which you don't have access to
  • The note which the image was originally uploaded to has been deleted
Learn More →

証跡動画:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

たぶんこれが一番早いと思います。