---
# System prepended metadata

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

---

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

この記事は[Pokémon Past Generation Advent Calendar 2023](https://scrapbox.io/PokemonPRNGDiscord/Pok%C3%A9mon_Past_Generation_Advent_Calendar_2023)の**192日目分** の記事です。

[前回](https://hackmd.io/@niart/HJlh2xzBC)のエメラルドのサイクリングロードTA自動化記事公開後、[**APSEAR氏**](https://x.com/AspearBerry05)よりこんな指摘を頂きました。

![image](https://hackmd.io/_uploads/rJo8Y_NS0.png)

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

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

## 再走にあたって
今回の再走に当たっての変更点は以下の2点です。
- 走行ルートの最適化
- 自動化フレームワークの変更

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

![upload_1e88659c3c55ddcb6503f6f7f005737a](https://hackmd.io/_uploads/SJtrhdNS0.png)
> 出典:　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](https://github.com/niart120/Project_Eryx) を~~態々引っ張り出して~~利用することにしました。

:::spoiler 中で動かしたコードはこんな感じ。
```python!
@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)# つづきから はじめる
```
:::

## 結果

細かい調整の末、理論値を達成しました。
![スクリーンショット 2024-06-10 215306](https://hackmd.io/_uploads/BJhZzKESR.jpg)

証跡動画:
{%youtube xd-dsseFHvY %}

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