ボーイズビーアルバシャス「少年よ、アルバを狩り尽くせ」

アルバトリオンを18000頭倒した男の備忘録

MHRiseやってたときの全自動カムラポイント荒稼ぎ機のソースコードを今更公開する(アルバトリオンとは関係なくてすみません)

2021年5月時点での動作確認はしていますが、それ以降のバージョン及びサンブレイクでの動作は未確認です

サンプル動画

おおまかな周回ルートやハンターの操作などのベースは出来上がっていると思うので、ハンターがサンプル動画通りの挙動をしなければスティックのベクトルや入力時間の微調整をしてください。また、自分で何かハンターの操作をマイコンに書き込みたいという方も、本ソースコード上部にハンターの主要な動作の関数を記載しているので参考程度にご活用ください。
マイコンへの書き込み方などがわからない場合は、過去の記事に大雑把に書いた(というか有志の方のリンク載せてるだけ)のでそちらから確認お願いします。

ソースコード

#include <NintendoSwitchControlLibrary.h>

/*****************  初期状態に関して  *****************/

/* 操作に関する設定について */
// 1.すべてデフォルトにしておくこと.

/* カメラに関する設定について */
// 1.照準の移動速度をとても速いにしておくこと.
// 2.1以外をデフォルトにしておくこと.

/* その他 */
// 1.カムラの里にいる(取り込み中でない)こと.
// 2.必須スキル「耳栓Lv.5」,「翔蟲使いLv.3」,「地質学Lv.2」を付けておくこと.


/*****************  基本操作の関数  *****************/

/* ゆっくり走行(lx,ly,ms) */
void jog(int jog_lx,int jog_ly,int jog_ms){
  SwitchControlLibrary().moveLeftStick(jog_lx, jog_ly);
  SwitchControlLibrary().sendReport();
  delay(jog_ms);
  SwitchControlLibrary().moveLeftStick(128,128);
  SwitchControlLibrary().sendReport();
}

/* ゆっくり走行,前方(ms) */
void jog_forward(int jog_forward_ms){
  SwitchControlLibrary().moveLeftStick(128,0);
  SwitchControlLibrary().sendReport();
  delay(jog_forward_ms);
  SwitchControlLibrary().moveLeftStick(128,128);
  SwitchControlLibrary().sendReport();
}

/* ゆくっり走行,A連打(lx,ly,ms) */
void jogA(int jogA_lx,int jogA_ly,int jogA_ms){
  for(int i_jog_A = 0; i_jog_A < jogA_ms / 200; i_jog_A++){
    SwitchControlLibrary().moveLeftStick(jogA_lx,jogA_ly);
    SwitchControlLibrary().pressButton(Button::A);
    SwitchControlLibrary().sendReport();
    delay(100);
    SwitchControlLibrary().moveLeftStick(jogA_lx,jogA_ly);
    SwitchControlLibrary().releaseButton(Button::A);
    SwitchControlLibrary().sendReport();
    delay(100);
  }
  SwitchControlLibrary().moveLeftStick(128,128);
  SwitchControlLibrary().sendReport();
}

/* ゆくっり走行,前方,A連打(ms) */
void jogA_forward(int jogA_forward_ms){
  for(int i_jogA_forward = 0; i_jogA_forward < jogA_forward_ms / 200; i_jogA_forward++){
    SwitchControlLibrary().moveLeftStick(128,0);
    SwitchControlLibrary().pressButton(Button::A);
    SwitchControlLibrary().sendReport();
    delay(100);
    SwitchControlLibrary().moveLeftStick(128,0);
    SwitchControlLibrary().releaseButton(Button::A);
    SwitchControlLibrary().sendReport();
    delay(100);
  }
  SwitchControlLibrary().moveLeftStick(128,128);
  SwitchControlLibrary().sendReport();
}

/* 走行(lx,ly,ms) */
void dash(int dash_lx,int dash_ly,int dash_ms){
  SwitchControlLibrary().moveLeftStick(dash_lx,dash_ly);
  SwitchControlLibrary().pressButton(Button::R);
  SwitchControlLibrary().sendReport();
  delay(dash_ms);
  SwitchControlLibrary().moveLeftStick(128,128);
  SwitchControlLibrary().releaseButton(Button::R);
  SwitchControlLibrary().sendReport();
}

/* 走行(前方) */
void dash_forward(int dash_forward_ms){
  SwitchControlLibrary().moveLeftStick(128,0);
  SwitchControlLibrary().pressButton(Button::R);
  SwitchControlLibrary().sendReport();
  delay(dash_forward_ms);
  SwitchControlLibrary().moveLeftStick(128,128);
  SwitchControlLibrary().releaseButton(Button::R);
  SwitchControlLibrary().sendReport();
}


/* 走行,A連打(lx,ly,,ms) */
void dashA(int dashA_lx,int dashA_ly,int dashA_ms){
  for(int i_dashA = 0; i_dashA < dashA_ms / 200; i_dashA++){
    SwitchControlLibrary().moveLeftStick(dashA_lx,dashA_ly);
    SwitchControlLibrary().pressButton(Button::A);
    SwitchControlLibrary().pressButton(Button::R);
    SwitchControlLibrary().sendReport();
    delay(100);
    SwitchControlLibrary().moveLeftStick(dashA_lx,dashA_ly);
    SwitchControlLibrary().releaseButton(Button::A);
    SwitchControlLibrary().pressButton(Button::R);
    SwitchControlLibrary().sendReport();
    delay(100);
    }
  SwitchControlLibrary().moveLeftStick(128,128);
  SwitchControlLibrary().releaseButton(Button::R);
  SwitchControlLibrary().sendReport();
}

/* 走行(前方,A連打) */
void dashA_forward(int dashA_forward_ms){
  for(int i_dashA_forward = 0; i_dashA_forward < dashA_forward_ms / 200; i_dashA_forward++){
    SwitchControlLibrary().moveLeftStick(128,0);
    SwitchControlLibrary().pressButton(Button::A);
    SwitchControlLibrary().pressButton(Button::R);
    SwitchControlLibrary().sendReport();
    delay(100);
    SwitchControlLibrary().moveLeftStick(128,0);
    SwitchControlLibrary().releaseButton(Button::A);
    SwitchControlLibrary().pressButton(Button::R);
    SwitchControlLibrary().sendReport();
    delay(100);
    }
  SwitchControlLibrary().moveLeftStick(128,128);
  SwitchControlLibrary().releaseButton(Button::R);
  SwitchControlLibrary().sendReport();
}

/* 疾翔け(R2) */
void wiredash_R2(){
  SwitchControlLibrary().pressButton(Button::ZL);
  SwitchControlLibrary().pressButton(Button::ZR);
  SwitchControlLibrary().sendReport();
  delay(200);
  SwitchControlLibrary().releaseButton(Button::ZL);
  SwitchControlLibrary().releaseButton(Button::ZR);
  SwitchControlLibrary().sendReport();
  //硬直時間delay(1000)
}

/* 疾翔け(X) */
void wiredash_X(){
  SwitchControlLibrary().pressButton(Button::ZL);
  SwitchControlLibrary().pressButton(Button::X);
  SwitchControlLibrary().sendReport();
  delay(200);
  SwitchControlLibrary().releaseButton(Button::ZL);
  SwitchControlLibrary().releaseButton(Button::X);
  SwitchControlLibrary().sendReport();
  delay(200);
}

/* 疾翔け(A) */
void wiredash_A(){
  SwitchControlLibrary().pressButton(Button::ZL);
  SwitchControlLibrary().pressButton(Button::A);
  SwitchControlLibrary().sendReport();
  delay(200);
  SwitchControlLibrary().releaseButton(Button::ZL);
  SwitchControlLibrary().releaseButton(Button::A);
  SwitchControlLibrary().sendReport();
  delay(800);
}

/* 疾翔け(X,2連) */
void wiredash_2(){
  int i;
  for(i=0;i<2;i++){
    SwitchControlLibrary().pressButton(Button::ZL);
    SwitchControlLibrary().pressButton(Button::X);
    SwitchControlLibrary().sendReport();
    delay(200);

    SwitchControlLibrary().releaseButton(Button::ZL);
    SwitchControlLibrary().releaseButton(Button::X);
    SwitchControlLibrary().sendReport();
    delay(800);
  }
}

/* 疾翔け延長 */
void wiredash_AB(){
  pushButton(Button::A);
  delay(100);
  SwitchControlLibrary().pressButton(Button::B);
  SwitchControlLibrary().moveLeftStick(128,0);
  SwitchControlLibrary().sendReport();
  delay(100);
  SwitchControlLibrary().releaseButton(Button::B);
  SwitchControlLibrary().moveLeftStick(128,128);
  SwitchControlLibrary().sendReport();
  delay(100);
}

/* 疾翔け延長(進行方向に視点切り替え) */
void wiredash_ABL(){
  pushButton(Button::A);
  delay(100);
  pushButton(Button::L);
  delay(200);
  SwitchControlLibrary().pressButton(Button::B);
  SwitchControlLibrary().moveLeftStick(128,0);
  SwitchControlLibrary().sendReport();
  delay(100);
  SwitchControlLibrary().releaseButton(Button::B);
  SwitchControlLibrary().moveLeftStick(128,128);
  SwitchControlLibrary().sendReport();
  delay(200);
}


/*****************  カムラの里内の関数  *****************/

/* カムラの里内移動 */
void Kamura(int place){
  holdButton(Button::MINUS,500);
  delay(100);
  switch(place){
    case 2: //オトモ広場
      pushHat(Hat::DOWN);
      break;
    case 8: //集会所
      pushHat(Hat::UP);
      break;
  }
  delay(100);
  pushButton(Button::A);
  delay(500);
}

/* ミノトに話しかける */
void Minoto(){
  dash(0,20,1200);
  delay(100);
  pushButton(Button::A);
  delay(800);
}

/* クエスト受注・出発 */
void quest(){
  pushButton(Button::A);
  delay(200);
  pushHat(Hat::UP);
  delay(200);
  pushButton(Button::A);
  delay(700);
  pushHat(Hat::UP);
  delay(200);
  pushButton(Button::A,150,3);
  delay(1600);
  pushButton(Button::ZR);
  delay(200);
  pushButton(Button::A);
  delay(19000);
}


/*****************  クエスト内の関数  *****************/

/* サブキャンプへファストトラベル */
void camp(int camp_num){
  holdButton(Button::MINUS,1000);
  pushButton(Button::A);
  switch(camp_num){
    case 1:
      pushHat(Hat::DOWN);
      break;
    case 2:
      pushHat(Hat::UP);
      break; 
  }
  pushButton(Button::A,100,2);
  delay(7500);
}

/* 1.虹色の鉱石 */
void point1_bismuth1(){
  camp(1);
  dashA(90,255,2000);
  //pushButton(Button::A,100,5);
  delay(2000); 
}

/* 2.焼けた鉱石 */
void point2_coal1(){
  dash(0,16,500);
  wiredash_A();
  delay(500);
  jogA(124,255,1200);
  delay(2500);
}

/* 3.焼けた鉱石 */
void point3_coal2(){
  dash(124,255,1360);
  wiredash_X();
  delay(800);
  wiredash_ABL();
  delay(400);
  wiredash_R2();
  delay(1000);
  wiredash_AB();
  delay(300);
  pushButton(Button::A,100,5);
  delay(1000);
  pushButton(Button::L);
  tiltRightStick(162,135,1000);
  delay(1200);
  wiredash_R2();
  delay(1000);
  wiredash_ABL();
  wiredash_A();
  delay(200);
  jog(0,0,100);
  pushButton(Button::A,100,4);
  delay(2000);
}

/* 4.竜骨の化石 */
void point4_bone1(){
  dash(0,202,1000);
  wiredash_X();
  tiltRightStick(66,170,500);
  delay(400);
  wiredash_R2();
  delay(1200);
  jog_forward(600);
  jogA(128,0,1600);
  delay(4800);
}

/* 5.虹色の鉱石 */
void point5_bismuth2(){
  dash(0,128,1300);
  delay(200);
  tiltRightStick(85,125,400); //tiltRightStick(86,125,400);
  wiredash_AB();
  tiltRightStick(156,92,500); //tiltRightStick(155,90,500);
  wiredash_R2();
  delay(1000);
  wiredash_AB();
  delay(400);
  wiredash_R2();
  delay(1400);
  jogA(128,255,1500);
  delay(1700); //delay(2000);
}


/* 6.竜骨の化石 */
void point6_bone2(){
  camp(2);
  dash(165,255,1400);
  wiredash_2();
  delay(1700);
  jog(196,255,500);
  delay(1300);
  jogA(196,255,1400);
  delay(3600);
}

/* 7.竜骨の化石 */
void point7_bone3(){
  dash(0,170,1500);
  wiredash_ABL();
  wiredash_R2();
  delay(800);
  wiredash_AB();
  tiltRightStick(64,64,400);
  wiredash_R2();
  delay(1200);
  wiredash_AB();
  delay(900);
  dash(196,0,3000);
  wiredash_X();
  delay(600);
  dash(255,64,3500);
  dashA(255,64,400);
  delay(5000);
}

/* 8.虹色の鉱石 */
void point8_bismuth3(){
  dash(255,166,1200);
  wiredash_X();
  delay(300);
  pushButton(Button::A);
  delay(300);
  wiredash_X();
  delay(400);
  wiredash_ABL();
  jog(145,0,3600);
  wiredash_A();
  delay(1300); //delay(100);
  jog(255,128,300);
  jogA(255,128,1000);
  delay(2000); //delay(1500);
}

/* 9.虹色の鉱石 */
void point9_bismuth4(){
  dash(215,248,1500);
  jog(215,248,1000);
  dashA(128,15,2000);
  tiltRightStick(104,56,1000);
  delay(200);
  SwitchControlLibrary().pressButton(Button::B);
  SwitchControlLibrary().moveLeftStick(128,0);
  SwitchControlLibrary().sendReport();
  delay(200);
  SwitchControlLibrary().releaseButton(Button::B);
  SwitchControlLibrary().moveLeftStick(128,128);
  SwitchControlLibrary().sendReport();
  delay(1600);
  wiredash_R2();
  delay(1000);
  wiredash_AB();
  delay(500);
  wiredash_R2();
  dash_forward(1500);
  dashA_forward(2500);
  delay(1500);
}

/* 10.竜骨の化石 */
void point10_bone4(){
  jog(254,235,400);
  wiredash_X();
  delay(600);
  pushButton(Button::L);
  delay(200);
  wiredash_X();
  delay(1000);
  pushButton(Button::B);
  delay(100);
  jogA_forward(3500);
  delay(2000);
  tiltRightStick(97,128,1000);
  delay(700);
}

/* 11.竜骨の化石 */
void point11_bone5(){
  dash(180,61,2000);
  dash_forward(2000);
  wiredash_X();
  delay(500);
  dash_forward(1000);
  dashA_forward(3000);
  delay(3200);
}

/* 12.焼けた鉱石 */
void point12_coal3(){
  camp(1);
  dash(128,255,3000);
  jog(255,255,1000);
  dash(255,100,5500);
  dash(96,0,2000);
  delay(700);
  tiltRightStick(78,128,500);
  wiredash_AB();
  delay(1000);
  wiredash_R2();
  tiltRightStick(174,128,500);
  delay(500);
  wiredash_AB();
  delay(1100);
  wiredash_R2();
  delay(1300);
  wiredash_AB();
  delay(100);
  dash(115,0,3500);
  dashA(85,60,1000);
  delay(100);
  tiltRightStick(96,70,1000);
  delay(1800);
}

/* 13.焼けた鉱石 */
void point13_coal4(){
  wiredash_R2();
  delay(700);
  wiredash_AB();
  delay(400);
  wiredash_X();
  delay(500);
  dash_forward(2500);
  dash(255,0,2000);
  dash_forward(3500);
  dash(255,211,500);
  wiredash_X();
  delay(100);
  pushButton(Button::L);
  delay(200);
  dash_forward(3700);
  dash(50,128,3700);
  dash(50,200,900);
  jog(32,32,500);
  wiredash_X();
  delay(100);
  pushButton(Button::L);
  delay(200);
  dash_forward(2000);
  dashA(160,0,2000);
  delay(1300);
}

/* 14.焼けた鉱石 */
void point14_coal5(){
  dash(64,32,1300);
  jog(64,32,1100);
  dash(64,32,700);
  dashA_forward(1000);
  delay(2000);
}

/* 15.焼けた鉱石 */
void point15_coal6(){
  camp(1);
  dash(80,255,600);
  dash(114,255,9500);
  dashA(114,255,1500);
  delay(2500);
}

/* 探索順路 */
void collect(){
  point1_bismuth1();
  point2_coal1();
  point3_coal2();
  point4_bone1();
  point5_bismuth2();
  point6_bone2();
  point7_bone3();
  point8_bismuth3();
  point9_bismuth4();
  point10_bone4();
  point11_bone5();
  point12_coal3();
  point13_coal4();
  point14_coal5();
  point15_coal6();
  point1_bismuth1();
  point2_coal1();
  point3_coal2();
  point4_bone1();
}

/* 帰還 */
void return_Kamura(){
  pushButton(Button::PLUS);
  delay(100);
  pushHat(Hat::RIGHT);
  delay(100);
  pushHat(Hat::UP,100,3);
  pushButton(Button::A);
  delay(100);
  pushHat(Hat::LEFT);
  delay(100);
  pushButton(Button::A);
  delay(15000);
  pushHat(Hat::UP);
  delay(100);
  pushButton(Button::A,100,10);
  delay(14000);
}


/*****************  初期設定  *****************/

void setup() {
  pushButton(Button::B,100,10);
  Kamura(8);
}


/*****************  繰り返し実行  *****************/

void loop() {
  Minoto();
  quest();
  collect();
  return_Kamura();
}