【BDSP自動化03】低レアきのみ自動購入【クラボのみ】

2022年あけましておめでとうございます。ますたーです。

今回は、208ばんどうろ(きのみじいさんのいえ)で「きのみ」の購入を自動化しました。ダイパリメイク自動化記事第3弾です。

 

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

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

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

 

概要

208ばんどうろでのきのみ購入を自動化しました。

これにより、「クラボ」「カゴ」「モモン」「チーゴ」「ナナシ」の5種類を、完全放置で入手できるようになります。これで、ポフィンづくりの練習や、ソノオタウンでのボールデコ用のシール引き換えに利用できます。

f:id:tangential_star:20211229203143g:plain
f:id:tangential_star:20211229215243p:plain
208ばんどうろのきのみじいさんの家で「きのみ」を自動で購入

もくじです。今回は比較的あっさりです。

ソースだけ欲しい人は、ソースコードまで読み飛ばす

 

きのみを買うなら、きのみじいさんのいえ(208ばんどうろ)

今作では、208ばんどうろの「きのみじいさんのいえ」で、原作で「こやし」*1を売ってくれた女性から、5種類のきのみ(クラボ・カゴ・モモン・チーゴ・ナナシ)を購入することができます。

当時の名残によるものか、1個ずつでしか購入できないという謎仕様制約が付いており、手動ではあまりにも時間効率が悪いです。しかしながら、今作ではここ以外にきのみを「購入」できる場所は無いため、大量に必要な場合には重宝するでしょう。

f:id:tangential_star:20211229215752g:plain
f:id:tangential_star:20211229210222p:plain
「きのみじいさんのいえ」は、ヨスガシティの西側(208ばんどうろ)に位置

余談ですが、「プラチナ」バージョンでは、トバリデパートに地下1階があり、そこで混乱きのみを無限に買うことができました。今作では「きのみ」唯一の購入経路が「きのみじいさんのいえ」であり、1つずつしか購入できず、また、ラインナップも序盤で入手できるきのみに限られる点は総じてマイナスといえるでしょう。このあたり、プラチナバージョンに準拠してくれればポフィンづくりのハードルも大きく下がったのに…。少し残念です。

f:id:tangential_star:20211229214900g:plain
f:id:tangential_star:20211229212445p:plain
ダイヤモンド・パール・プラチナ版では「こやし」を売ってくれた
f:id:tangential_star:20211229203554g:plain
f:id:tangential_star:20211229205102g:plain
プラチナバージョンでは、トバリデパートの地下で「きのみ」が買えた。
ダイヤモンド・パールおよびリメイクのBDSPには、そもそもデパ地下がない。

 

低レアきのみはソノオタウンで「シール」に交換できる

さて、今作で「きのみ」を何に使うかと言えば、真っ先に思いつくのは「ポフィンづくり」でしょうか。しかしながら、ポフィンづくりにおいてはふれあい広場で拾えるきのみを使うことが一般的で、208ばんどうろで買える「クラボのみ」などの低レアきのみは不向きです。一方、他の用途としては、ソノオタウンでの「シール」交換が挙げられます

f:id:tangential_star:20211230172913g:plain

ソノオタウンのフラワーショップの店員がきのみを「シール」と交換してくれる

ソノオタウンのフラワーショップは、その名とは裏腹に、きのみやお花は売ってくれません。代わりに、持ち込んだ一定量のきのみを、ボールデコ用の「シール」と交換してくれます。具体的には、「クラボ」「カゴ」「モモン」「チーゴ」「ナナシ」は各3個で1枚のシールと交換してくれます。

フラワーショップのラインナップについては、下表の通りです。

フラワーショップで交換できる「シール」
シール名称 コンテスト分類 交換に使うきのみ 個数 「きのみ」の入手方法(植える以外) きのみ交換以外でのシール入手法

f:id:tangential_star:20211231165523p:plain

エレキシールA

かっこよさ

f:id:tangential_star:20211231171921p:plain

クラボ
3個

208番道路(きのみじいさんのいえ)で購入

※自動化(本記事)で購入可能!

ナギサ市場(日曜日)

f:id:tangential_star:20211231165535p:plain

ソングシールD

かしこさ

f:id:tangential_star:20211231171931p:plain

カゴ
3個

208番道路(きのみじいさんのいえ)で購入

※自動化(本記事)で購入可能!

ナギサ市場(木曜日)

f:id:tangential_star:20211231165547p:plain

ハートシールA

かわいさ

f:id:tangential_star:20211231171939p:plain

モモン
3個

208番道路(きのみじいさんのいえ)で購入

※自動化(本記事)で購入可能!

ナギサ市場(月曜日)

f:id:tangential_star:20211231165557p:plain

ファイアシールD

たくましさ

f:id:tangential_star:20211231171945p:plain

チーゴ
3個

208番道路(きのみじいさんのいえ)で購入

※自動化(本記事)で購入可能!

ナギサ市場(木曜日)

f:id:tangential_star:20211231165607p:plain

バブルシールD

かわいさ

f:id:tangential_star:20211231171952p:plain

ナナシ
3個

208番道路(きのみじいさんのいえ)で購入

※自動化(本記事)で購入可能!

ナギサ市場(日曜日)

f:id:tangential_star:20211231165626p:plain

スモークシールB

たくましさ

f:id:tangential_star:20211231172005p:plain

ヒメリ

3個 きのみじいさんからランダム入手 ナギサ市場(木曜日)

f:id:tangential_star:20211231165637p:plain

フラワーシールF

うつくしさ

f:id:tangential_star:20211231172016p:plain

オレン

3個 きのみじいさんからランダム入手 ナギサ市場(日曜日)

f:id:tangential_star:20211231165647p:plain

パーティシールB

うつくしさ

f:id:tangential_star:20211231172025p:plain

キー
3個 きのみじいさんからランダム入手 ナギサ市場(土曜日)

f:id:tangential_star:20211231165658p:plain

スターシールE

---

f:id:tangential_star:20211231172032p:plain

ラム
3個 きのみじいさんからランダム入手 ナギサ市場(木曜日)

f:id:tangential_star:20211231165708p:plain

ラインシールB

---

f:id:tangential_star:20211231172041p:plain

オボン
3個 きのみじいさんからランダム入手 ナギサ市場(日曜日)

f:id:tangential_star:20211231165717p:plain

バーニングシールA

かっこよさ

f:id:tangential_star:20211231172048p:plain

ズリ
10個 きのみじいさんからランダム入手 日替わりランダム(テレビコトブキ3階)

f:id:tangential_star:20211231165730p:plain

プリティシールA

かわいさ

f:id:tangential_star:20211231172055p:plain

ブリー

10個 きのみじいさんからランダム入手 日替わりランダム(テレビコトブキ3階)

f:id:tangential_star:20211231165738p:plain

リーフシールC

たくましさ

f:id:tangential_star:20211231172109p:plain

ナナ

10個 きのみじいさんからランダム入手 日替わりランダム(テレビコトブキ3階)

f:id:tangential_star:20211231165749p:plain

ロックシールB

たくましさ

f:id:tangential_star:20211231172629p:plain

セシナ
10個 きのみじいさんからランダム入手 日替わりランダム(テレビコトブキ3階)

f:id:tangential_star:20211231165800p:plain

クールシールC

うつくしさ

f:id:tangential_star:20211231172641p:plain

モコシ

10個

ふれあい広場で回収

※BDSP自動化02(前回記事)で自動化可能!

日替わりランダム(テレビコトブキ3階)

f:id:tangential_star:20211231165809p:plain

ダークシールA

かしこさ

f:id:tangential_star:20211231172649p:plain

ゴス
10個

ふれあい広場で回収

※BDSP自動化02(前回記事)で自動化可能!

日替わりランダム(テレビコトブキ3階)

f:id:tangential_star:20211231165817p:plain

スカイシールC

かっこよさ

f:id:tangential_star:20211231172656p:plain

ラプタ
10個

ふれあい広場で回収

※BDSP自動化02(前回記事)で自動化可能!

日替わりランダム(テレビコトブキ3階)

f:id:tangential_star:20211231165832p:plain

スパークシールA

かっこよさ

f:id:tangential_star:20211231172703p:plain

ウブ
10個

ふれあい広場で回収

※BDSP自動化02(前回記事)で自動化可能!

(?)日替わりランダム(テレビコトブキ3階)

※未確認&攻略サイト毎に表記が異なる

※シールのその他入手方法はポケモン王国攻略館「ボールデコ」より引用・一部改変。

この表に記載の通り、208ばんどうろで購入できるきのみ3個(=240円)で、「エレキシールA」「ソングシールD」「ハートシールA」「ファイアシールD」「バブルシールD」のいずれか対応する1枚に交換できます。

f:id:tangential_star:20220101013833g:plain

「エレキシールA」(クラボ×3)
無限に買える「きのみ」で引き換えられるボールデコのエフェクトを比較。
f:id:tangential_star:20220101013949g:plain
f:id:tangential_star:20220101013931g:plain
左:「バブルシールD」(ナナシ×3)/右:「ファイアシールD」(チーゴ×3)
f:id:tangential_star:20220101013912g:plain
f:id:tangential_star:20220101013852g:plain
左:「ハートシールA」(モモン×3)/右:「ソングシールD」(カゴ×3)

前述の通り、208ばんどうろで購入できるきのみ3個で、対応するシール1枚に交換できますが、スーパーコンテストショーの評価で考えると、「うつくしさ」以外の任意のボールデコシールと交換ができる、ということになります。さらに、ソノオタウンのシール交換では、前回記事(ふれあい広場)で拾えるきのみも同様に10個単位で「クールシールC」「ダークシールA」「スカイシールC」「スパークシールA」に引き換えられるため、「うつくしさ」コンテストを含む5分野すべてのボールデコシールを集めることも可能です

上記により、低レアきのみの利用方法として、ソノオタウンでのきのみ交換は有効であると言えます。

なお、ナギサシティの「シールいちば」でも購入することができますが、ナギサシティなので物語終盤であることも考えると、物語序盤で、実質240円で気軽に購入できるこちらも有意義と言えます。そもそも上記のラインナップは火曜・木曜・土曜には一つもありませんし、曜日を選ぶ、という点でも日時に依らず調達できる点では軍配が上がります。

 

自動化の準備(プログラムの編集)

さて、おまたせしました。肝心の準備ですが、必要に応じて2箇所の数字を書き換えるだけです。具体的には、「クラボ」「カゴ」「モモン」「チーゴ」「ナナシ」のどのきのみを購入するかを、それぞれ1~5でWHICH_BERRYに修正します。続いて、何個購入したいかをMAXLOOPにかきこみます。

// ★何番目のきのみを買うか?
const int WHICH_BERRY = 2; // 1:クラボ、2:カゴ、3:モモン、4:チーゴ、5:ナナシ 
// ★何個買うか?
volatile int MAXLOOP = 980; // 1個80円なので、十分なおかねを持っておいてくださいね!

基本的には、これら2箇所を書き換えたら、きのみじいさんのいえ(208番道路)の女性の前に立ってArduino Leonardoを差し込むだけでOKです。

 

ソースコード

自動化のソースコードです。必要に応じてWHICH_BERRYとMAXLOOPを書き換えてご使用ください。また、十分なお金を所持しておいてください。目安として、1個80円なので、999個購入でも79,920円です。

/* 
 *  ★ポケモンBDSP Arduino Leonardoによる、208番道路のきのみを買い付ける★、
 *  1個ずつしか売ってくれない店員からバカ正直に1個ずつ買う自動化。
 *  なんでまとめ買いできないの…?しかもカーソル位置記憶してくれないし。c⌒っ.ω.)っ
 *    
 *  前提
 *  ・おかねを持っていること
 *  
 *  注意事項
 *  ・時間効率が悪いです。(シール交換・ポフィンづくり練習など、大量の「きのみ」が必要であれば重宝すると思います)
 *  
 *  設定
 *  ・はなしのはやさ:はやい
 *  ・もじモード:ひらがな
 *  ・せんとうアニメ:みない
 *  
 *  (c) 2021 ますたーの忘備録
 *  https://tangential-star.hatenablog.jp/
*/

#include <SwitchControlLibrary.h>

#define HOLDTIME (95)     // 1回のキー入力の長押し時間
#define RENDA_CYCLE (150) // A連打の間隔(ミリ秒)

// ★修正ここから★-----------------

#define START_WITH_MENU (false) // 最初から「どれも まるまると そだってますよ」の画面から始める場合。

// ★何番目のきのみを買うか?
const int WHICH_BERRY = 2; // 1:クラボ、2:カゴ、3:モモン、4:チーゴ、5:ナナシ 
// ★何個買うか?
volatile int MAXLOOP = 980; // 1個80円なので、十分なおかねを持っておいてくださいね!

// ★修正ここまで★-----------------

void PushRL(int delay_time_ms);
int PushKey(char* keyname, int holdtime, int delaytime);
void die(void);


void setup() {
  // コントローラーとして認識されるためにRLを7回ほどカチャカチャする
  for(int i=0;i<7;i++)PushRL(300);
  delay(1200);
  // Rを長押しして、ポケッチを収納
  PushKey("R", 1300, 1000);

  if(!START_WITH_MENU){
    PushKey("A", HOLDTIME, 600); // あの…… きのみは いかが?▼
    PushKey("A", HOLDTIME, 600); // どれも まるまると そだってますよ▼
    PushKey("A", HOLDTIME, 600); // →クラボのみ 80円
  }
  
}

void loop(){
  if(MAXLOOP<=0)die(); // 必要個数購入したらループ終了
  for(int i=1; i < WHICH_BERRY ; i++){ PushKey("Down", HOLDTIME, 150); } // カーソルをあわせて
  PushKey("A", HOLDTIME, 550); // →**のみ 80円
  PushKey("A", HOLDTIME, 550); // **のみを 買った
  PushKey("A", HOLDTIME, 550); // ●●は **のみを きのみポケットに しまった
  PushKey("A", HOLDTIME, 350); // その **のみ……▼
  PushKey("A", HOLDTIME, 550); // ポケモンの…… をまぜた じょうしつな つちで そだてたから
  PushKey("A", HOLDTIME, 550); // えいよう まんてん です……
  MAXLOOP--;
}

void PushRL(int delay_time_ms){
  SwitchControlLibrary().PressButtonR();
  SwitchControlLibrary().PressButtonL();
  delay(HOLDTIME);
  SwitchControlLibrary().ReleaseButtonR();
  SwitchControlLibrary().ReleaseButtonL();
  delay(delay_time_ms);
  return;
}
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);
}
void die(void){
  PushKey("Home", HOLDTIME, 600); // えいよう まんてん です……
  for(;;)delay(1000);
}

 

あとがき

今回は、ダイパリメイク自動化の第3段として、きのみの購入を自動化しました。

正直、今作では道具全般の入手方法が限られており、「クラボのみ」などの購入できるきのみですら「1個ずつ」で買わないといけない制約が大きいです。そういう意味でも、道具やお金の自動化には一定の価値があると考えます。

特に、今回はポフィンづくりなどで一定数のきのみを要するのに、入手手段が限られるなど、ミスマッチも大きいです。こういったところを緩和すべく、自動化できる部分は自動化していけたらと考えます。

 

これからものんびりと色々考えながら自動化を進めていけたらと思いますのでよろしくおねがいします。

2022年あけましておめでとうございます

さて、本日は2022年1月1日(土)、すなわち2022年の元日です。

改めまして、みなさま、あけましておめでとうございます。今年もどうぞよろしくおねがいします。このブログも、2020年11月7日に初めて1年以上経ちますが、たくさんの人にご覧頂いており、嬉しく思います。特に先月2021年12月は、1ヶ月で20,000PV以上のアクセスをいただき、ポケモンユーザーの多さ、期待を感じております。

一方で、日々の業務繁忙、そして自動化以外に純粋にゲームを楽しむ時間が取りにくいこともあり、なかなか更新ペースが落ちてきています。とは言え、私の信条として「ソースコードだけ」なブログには極力したくないので、しばらくこの感じでマイペースに更新は続けていけたらと思います。もちろん、また今月も更新できればしたいと考えます。応援コメントなど、いただけますと励みになりますのでよろしければぜひともお願いします(リクエストは受け付けますが、この通りマイペース更新なので悪しからず…)。

皆様も、のんびりと温かい目でご覧いただければ幸いです。

 

今回はここまでですかね。ではでは~c⌒っ.ω.)っ

 

引き続き本ブログもよろしくお願いいたします。

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

 

前回記事:【BDSP自動化02】ふれあい広場できのみ集め

次回記事:【BDSP自動化04】特性「ものひろい」自動化【ふしぎなアメ・ぎんのおうかん】

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

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

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

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

---

*1:こやし:第4~第6世代のアイテム。きのみを植える時に一緒に使うことができ、きのみが落ちるまでの時間を伸ばしたり、早く成長させたりできた