【SV自動化01】学校最強大会A連打攻略【金策、レベル上げ、時々オシャボ】

こんにちは。ますたーです。

今回はポケモンSVのクリア後の金策「学校最強大会」の自動化の記事です。

ポケモンSV自動化の記事、第1弾となります。

 

なお、Arduino Leonardo自動化の導入・機材構成については導入記事を参考にしてください。

導入記事:【Arduino自動化01】Arduino開発環境の導入

※本ブログに初めてお越しの方は「本ブログについて」もぜひ、ご覧ください。

 

概要

ポケモンSVのシナリオクリア後に開放される、学校最強大会(バトルスクールウォーズ)の攻略自動化です。「おまもりこばん」を持たせれば、1試行あたり約15分で、12万円*1が稼げます。だいたい丸1日24時間の放置でカンストします。

また、優勝賞品としてランダムに道具も受け取れるため、副次的にも美味しい周回となります。稼いだお金はタウリンなどの努力値上げ道具の購入や、マリナードタウンの競りに使いましょう。

シナリオクリア後に開放される「学校最強大会」を自動で攻略(1周あたり約15分)。
お金稼ぎだけでなく、レベル上げもできて、極稀にガンテツボールも手に入るぞ。

丸1日放置すればおこづかいがカンスト(9,999,999円)する。ドーピングアイテムを買おう

もくじです。

 

おまもりこばん所持で時給96万、24時間でカンスト(11,612,160円)

今作では、ポケモン育成に必要なドーピングアイテム(タウリンなど)を安く買うことができる施設がないため、基本的には定価での購入が必要となります。そんな中、金策(お金稼ぎ)の筆頭といえば、シナリオクリア後の「学校最強大会」です。

学校最強大会では全部で4戦連続でバトルすることになりますが、1戦目・2戦目の報酬は26,400円、3回戦は33,600円、4回戦は34,560円にもなります(おまもりこばん必要)。

1周あたり、4戦のクリアで約15分かかりますが、時給で換算すれば「96万円」という圧倒的高効率な金策となります。

学校最強大会の賞金は4戦目で34,560円。4戦の合計は129,060円だ(おまもりこばん込)

さらに、戦闘ごとにもらえる個別の賞金とは別に、優勝賞品として「テラピース」や「タウリン」などの貴重なアイテムや、「きんのたま」などの換金アイテムがランダムで1つ貰えます。

特筆すべきは、ごく低確率でガンテツボールなどの非売ボールも入手できることでしょう。

パルデア地方において、ガンテツボールを複数個入手できる手段は、この「学校最強大会での優勝賞品」と「マリナードタウンの競り」くらいなので、お金が足らずで時間が余っていれば「とりあえず」で周回していても良いかもしれません。

ごく低確率でガンテツボールなどの非売ボールも手に入る。貰えたらラッキー!

 

学校最強大会の自動周回に必要な準備

さて、おまたせしました。ここからは、「学校最強大会」の周回に必要な要素(準備するもの)を紹介します。

【準備1】周回要員として、ニンフィア夢特性)またはハバタクカミを準備

準備するポケモンですが、学校最強大会ではフェアリー技の通りが良い(タイプ相性で無効にされることがなく、多くの相手で等倍以上)ため、放置周回前提の場合、フェアリータイプのポケモンに軍配が上がります。

結論から言えば、夢特性フェアリースキン)」のニンフィアが最適です。あるいは、スカーレット版の方は「ハバタクカミ」でもOKです。私は(「とくせいパッチ」が準備できなかったので)ハバタクカミを採用しました。

ニンフィアの場合は「ハイパーボイス」、ハバタクカミの場合は「ムーンフォース」を技の先頭にしておきましょう。テラスタイプは「フェアリー」推奨です。いずれの場合も、「ひかえめミント」などで「とくこう」に補正がかかるようにします。

とくこう・すばやさに極振りしたハバタクカミ。「おまもりこばん」をもたせよう

ちなみに、私が採用したハバタクカミの特徴は、種族値135という高いすばやさ・とくこうを持つこと。学校最強大会の相手に一貫して通りが良いフェアリータイプの特殊技をタイプ一致で先制して打つことができます。

努力値配分ですが、努力値を振る余裕があれば、Cぶっぱ(とくこうに252相当)でOKです。残りは好みですが、私はCS252, H6(とくこう252, すばやさ252, HP6)で振りました。CBぶっぱ(とくこう252, ぼうぎょ252)という人も多いみたいです。

努力値はとくこう極振りでOK。「ひかえめミント」でとくこうに補正をかけると安心だ

 

【準備2】レベル上げには「技覚えスキップ」ONと「かわらずのいし」所持を推奨

この学校最強大会ですが、手持ちポケモンにも「けいけんち」がもらえるため、レベル上げを兼ねることができます

ここで注意すべきは、不要なわざを覚えてしまう可能性があることでしょう。タイムロスになるだけでなく、覚えていた技を失う可能性がある点は特筆すべきでしょう。

例えば、進化前でしか獲得できない技を持っているポケモンキノガッサの「きのこのほうし」など)や、貴重なわざマシンで覚える技を主力に戦うポケモンニンフィアの「ハイパーボイス」など)があります。

これらのわざを意図せず上書きしてしまわないように、設定から「わざ覚えスキップ」を「する」にしておくと安心です。

メニューの設定から「わざ覚えスキップ」をONにできる

また、進化前のポケモンの育成の場合には、「進化」の可能性も考慮しておくと良いです。

コマンド中に「B」を含めることで進化をキャンセルするとはいえ「進化」のモーションは非常に長いです。対策としては「かわらずのいし」を持たせておくと安心です。

「かわらずのいし」はデリバードポーチで購入することができます。

進化する可能性のあるポケモンのレベリング時には「かわらずのいし」を持たせよう
「レッツゴー」最適と言われる進化前ポケモン「ブロロン」などのレベル上げにも最適だ

 

プログラムの使い方

手持ちポケモンの1匹目に周回用ポケモンニンフィアまたはハバタクカミ)を用意し、学校最強大会の受付の前でArduinoを差し込むだけです。

あとは、放置するだけ。簡単ですね(時々、ハッサムバレットパンチなどで倒れることがあるので、倒れたら手動で攻略しましょう)。

学校最強大会の受付の前に立ったら、Arduinoを挿し込もう。自動で周回してくれる

 

ソースコード(学校最強大会)

プログラムは非常に単純で、loop()関数の中をご覧いただければわかる通り、ひたすら「A→R→A→A→A→B→B」を押し続けるというものです。

受付の前に立ってArduinoを挿すだけで、先頭ポケモンが倒れない限りは戦い続けてくれます。

/*  ポケモンSV 金策用
 *   
 *   学校最強大会でA連打するだけのプログラム。
 *   【準備】
 *   ・手持ちで準備するのは「ハバタクカミLv100(ひかえめCぶっぱ)」を先頭に。
 *    ※わざ1にムーンフォースを。
 *    ※テラスタルタイプは「フェアリー」想定。
 *   ・受付の前で立つ。
 *   ・設定で「技覚えスキップ」を設定しておくと、ほかキャラのレベルアップも平行して行えます。
 *   
 *  
 *  (c) 2022 ますたーの忘備録
 *  https://tangential-star.hatenablog.jp/
*/

#include <SwitchControlLibrary.h>
#define HOLDTIME (95) // 1回のキー入力の長押し時間

int PushKey(char* keyname, int holdtime, int delaytime);

void setup() {
  for(int i=0;i<7;i++)PushKey("R", HOLDTIME, 300);
  delay(1000);
}

void loop() {
  PushKey("A", HOLDTIME, 300);
  PushKey("R", HOLDTIME, 300);
  PushKey("A", HOLDTIME, 300);
  PushKey("A", HOLDTIME, 300);
  PushKey("A", HOLDTIME, 300);
  PushKey("B", HOLDTIME, 300);
  PushKey("B", HOLDTIME, 300);
}

int PushKey(char* keyname, int holdtime, int delaytime){
  // ホームボタン・方向キーはRight, Left, Up, Down, Homeなど2文字以上で入力。
  // その他ボタン入力は1文字(A,B,X,Y,R,L,+,-)ZR・ZLにも対応
  // 同時押しは非対応
  
  if(strlen(keyname)==1){
    switch(keyname[0]){
      case 'A': case 'a': // A
        SwitchControlLibrary().PressButtonA(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonA(); delay(delaytime);
      break;
      case 'B': case 'b': // B
        SwitchControlLibrary().PressButtonB(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonB(); delay(delaytime);
      break;
      case 'X': case 'x': // X
        SwitchControlLibrary().PressButtonX(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonX(); delay(delaytime);
      break;
      case 'Y': case 'y': // Y
        SwitchControlLibrary().PressButtonY(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonY(); delay(delaytime);
      break;
      case 'L': case 'l': // L
        SwitchControlLibrary().PressButtonL(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonL(); delay(delaytime);
      break;
      case 'R': case 'r': // R
        SwitchControlLibrary().PressButtonR(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonR(); delay(delaytime);
      break;
      case 'H': case 'h': // Home
        SwitchControlLibrary().PressButtonHome(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonHome(); delay(delaytime);
      break;
      case '+': case 'p': case 'P': // Plus
        SwitchControlLibrary().PressButtonPlus(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonPlus(); delay(delaytime);
      break;
      case '-': case 'm': case 'M': // Minus
        SwitchControlLibrary().PressButtonMinus(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonMinus(); delay(delaytime);
      break;
      default:
      break;
    }
  }else if(strlen(keyname)>=2){
    switch(keyname[0]){
      case 'z': case 'Z': // ZR/ZL
        if(keyname[1]=='R'||keyname[1]=='r'){
          SwitchControlLibrary().PressButtonZR(); delay(holdtime);
          if(holdtime>0)SwitchControlLibrary().ReleaseButtonZR(); delay(delaytime);
        }
        if(keyname[1]=='L'||keyname[1]=='l'){
          SwitchControlLibrary().PressButtonZL(); delay(holdtime);
          if(holdtime>0)SwitchControlLibrary().ReleaseButtonZL(); delay(delaytime);
        }
      break;
      case 'r': case 'R': // right
        SwitchControlLibrary().MoveHat(2); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().MoveHat(8); delay(delaytime);
      break;
      case 'l': case 'L': // left
        SwitchControlLibrary().MoveHat(6); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().MoveHat(8); delay(delaytime);
      break;
      case 'u': case 'U': // up
        SwitchControlLibrary().MoveHat(0); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().MoveHat(8); delay(delaytime);
      break;
      case 'd': case 'D': // down
        SwitchControlLibrary().MoveHat(4); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().MoveHat(8); delay(delaytime);
      break;
      case 'H': case 'h': // Home
        SwitchControlLibrary().PressButtonHome(); delay(holdtime);
        if(holdtime>0)SwitchControlLibrary().ReleaseButtonHome(); delay(delaytime);
      default:
      break;  
    }
  }else{
    return -1;
  }
  return strlen(keyname);
}

 

あとがき

いやー、ついにポケモンSVが発売されましたね(11月)。今作は非常にシナリオが良好で、満足度も高いゲームスタイルだったと考えます。

今回紹介した金策は、ストーリー攻略後の要素となるため、一部「ネタバレ」という形にならざるを得ないかなぁ、ということであえて公開を遅らせていました。

とは言え、発売からまもなく「対戦」にも注目が集まっており、これから2,3年遊んでいくだけの基礎的な自動化は待ったなしで望まれていましたね。今まで自動化にチャレンジしたことがなかった人たちもポケモンSVの発売を機に志す人が増えているようで、現に、Discordの自動化勉強会サーバーでは、2022年12月11日現在でメンバーが1,240人もいるそうです。ポケモン自動化ならびにポケモンそのものに対する世間の興味が高まっているのを感じます。

もちろん、ポケモンSVという点だけでも、オープンワールド形式での「ポケモン本編」ということや、決められたシナリオ・ルートがないという、今までとは一線を画すゲームデザインでしたし、パッケージを飾る伝説ポケモンと最初から一緒に冒険できたりなど話題にも事欠かない良ゲームだと思います。

オープンワールドライクなポケモンという点では、前作の「レジェンズアルセウス」もありましたが、それと比しても広大なフィールドが、ほぼ画面暗転(読み込み)なしで冒険できるというのは、世界観に没入できて楽しく遊べました(画面酔いをしてしまう筆者にとっては、実はちょっと酷なゲームだったりしますが)。

何はともあれ、これから長いこと遊んでいくゲームだと思うので、ゆっくり楽しみたいと思います。まずは図鑑完成を目指しますw

 

 

さて、ポケモンSVの記念すべき第1弾の自動化は、金策自動化としました。

最近は「Arduino Leonardoでの自動化」のみならず、Poke-Controllerを使った自動化が広まっている一方で、やはり、Arduino Leonardo単体で安定して動くプログラムは「手軽」で嬉しいです。

一応、今のところは「Arduino Leonardoでの自動化の専門ブログ」という立ち位置?なので、最初に紹介するのはやはり単体プログラムにしようかと思っていました。

気が向いたらPoke-Controller用のプログラムも紹介するかもしれませんが、しばらくはArduino単体のプログラムにすると思います。

もしかしたらプログラム以外の更新をするかもしれませんが、引き続き温かい目で見ていただければ幸いです。

 

ではではc⌒っ.ω.)っー

 

--

本ブログについて:本ブログについて

 

導入記事:【Arduino自動化01】Arduino開発環境の導入

ポケモンSVの記事:スカーレットバイオレットArduino自動化 カテゴリーの記事一覧

ポケモン剣盾の記事:ポケモン剣盾Arduino自動化 カテゴリーの記事一覧

ポケモンBDSPの記事:ダイパリメイクArduino自動化 カテゴリーの記事一覧

レジェンズアルセウスの記事:レジェンズアルセウスArduino自動化 カテゴリーの記事一覧

 

YouTubeチャンネル:ますたーの忘備録 - YouTube

*1:おまもりこばん込みで、1回戦:26,400円、2回戦:26,400円、3回戦:33,600円、4回戦:34,560円