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

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

アルバ大剣ペア1分57秒を元に応用した知識や技術を雑にまとめた

今回の大剣ペア1分台を達成するにあたって、装備やチャートや動きなどの様々な知識や技術を応用したのでゆる~く書いていきます。今後TAをする方やチャートゲーを走る方たちの参考になればうれCかぎりです。

記事の内容と照らし合わせながら確認するとわかりやすいので動画のリンク置いときます。

極意のオンパレード(装備について)

今回は定番の冰気錬成+猫火事場ではなく"火事場力・極意"を採用しました。目標タイムが爆速が故に、9割以上ハメのチャートゲーになり納刀する隙がほぼないのと、冰気ゲージ回復速度が遅いことから、火事場極意の方が恒常的に高火力を維持できると判断しました。実際に傷役は全て傷付けでゲージを消費しており、ぶっ飛ばし役も開幕のコンボですぐ消費しきってしまっていて、以降の強溜めや真溜めで1発あたり100ダメージ程度の差が出たりします。

見切りではなく力の解放で会心率を上げていることもかなり異質で、ヘビィボウガンでは主流ですが今回大剣でも力を解放しました。これは攻撃カスタム2つで攻撃力上限を底上げした時の会心率の補填的役割と、非怒り時の会心率を100%にすることを担っています。

挑戦者に関しては、攻撃4災禍1or攻撃6災禍3と回避バフで攻撃力上限に達するので必要なかったのですが、開幕しばらく回避バフをもらえないので上限に達しておらず、挑戦者抜きだと少し火力が物足らないような気がしたので結局採用することとなりました。細かい計算をしてないので挑戦なしの場合の攻撃盛り装備とどの程度変わるってくるかはあんまわかりませんが、大して変わらないと思います。

体力・防御調整面でも火事場極意が有利

猫火事場は体力を残り10以下にしないと発動しないので、食事スキルで防御力UP系を食べると飯リセの必要がでてくるのですが、火事場極意だと防御小メシを食べても高確率で火事場発動ラインまで被ダメを稼げます。ただ解放発動ラインに達しないことはときたまあります。

また、不動の装衣に体力珠を1ついれることで残り体力に少し余裕をもって調整できるため、クラッチ怯み時に地形の起伏や壁などに干渉して万が一かすり傷を受けても1回は耐えられ、リセットせずに続行できるというメリットがあります。これがほんとにほんとにほんとにほんとに🦁心強く、体感ではリセマラ効率が倍以上になっている気がします。

キィン!!!音爆弾の音ォ~!!!

アイスボーンの大剣といえば脱糞真溜め(こやし玉強化撃ちからの真溜め)が主流ですが、ではなぜ今回音爆弾を使用したかというと、かっこいいからです。まあそれよりも非常に重要なことが実際にありまして、"クラッチ怯み直後にキョロキョロさせる"という挙動をさせたいからです。こやし玉の場合、強化撃ちを発射してからアルバに着弾するまで数フレームあり、クラッチ怯み中にこやし玉の着弾判定をいれるのが間に合わなくなることがあります。その場合、キョロキョロせずこちらが真溜めを振る前に即座にこちらに向かって走ってきてひき殺されるリスクが高いことに加え、走ってくる方向が左右にずれやすく真溜め自体当たらないことも多々あります。

漢は黙って壁ドン1回や!

非怒り時間とクラッチに要する時間の削減によるDPS(1秒当たりのダメージ)の向上を理由に、今回のTAにおける壁ドン回数は1回が最適だと判断しました。

傷付けや武器固有の下準備、怯み値をダウン中に超過させるか否かということを考えると、壁ドン回数は1回が強いとは一概には言えないのでご留意ください。

大剣の横ペチは強い (⌒,_ゝ⌒)

次はコンボについてです。壁ドン後に、

抜刀溜め1→強溜め2→(ノ∀`*)ペチ→強溜め2→真溜め3

という見慣れないコンボをしていますが、抜刀3強溜め3真溜め3という定番コンボのDPSを上回ります。動画では2回目の強溜めが2ですが、傷付け後の着地位置とアルバの頭の位置関係やアルバの壁にあたるまでの時間(開幕火ブレス直後モーションに大きく依存)によっては強溜め3になることもあり、めちゃくちゃ強力です。あと(ノ∀`*)ペチもスタン値に貢献してくれています多分。

龍活性化直後や角破壊後の起き攻め(かなり実用的)

多分本記事でいっちゃん実用性あることです。ここまで読んでくださってる方には必要ないかもですが、起き攻めという技術はダウンからの起き上がり直後のみに使えるわけではなく、麻痺やスタンなどの状態異常、各種怯みや特定のモーションなどに付与されるSA(スーパーアーマー)が切れた直後の次のモーションが始まる瞬間でも使えます。

例えばアルバトリオンにおける戦術的優位性の高い起き攻めポイントは、壁ドン起き上がり直後、スタン起き上がり直後、麻痺解除直後、クラッチ怯み終わり、角破壊怯み終わり、龍活性化モーション終わりなどが挙げられます。狙いどころはかなり限定的ですが、クラッチ怯みおわりに起き攻めを狙えば2連続クラッチも理論上可能ということです。筆者自身はグリッチ竜杭砲で何度か2連続クラッチ怯みは成功しましたが、ペアやフルパで完璧な怯み値管理をすれば片手剣や大剣では再現できるのではないかと思います。

ただ部位怯みがクラッチ怯みに置換されるという性質上、いつでも起き攻めを狙えば良いというわけではないのですが、大抵の場合は起き攻めを狙うことで有利に働きます。

だいぶ根本的なことから書きましたが、今回の起き攻めポイントは龍活性直後の角破壊強溜めと、角破壊怯みおわりの真溜めです。前者は龍活性化モーション中に顔面前の安置に立ってSA中に真溜めをいれるという方法もありましたが、起き攻めができなくなる(しようと思えばできる)ので角破壊までにモーションを挟むこととなり、運ゲーを増やしてしまうので咆哮で抜刀2→強溜め2→即コロリン納刀→フレーム回避→抜刀1→強溜め2という動きでモーション厳選せずに真溜めに近い火力を叩きだしつつ起き攻め角破壊をしています。こうすることで角破壊おわりの起き攻め真溜めにも繋げられ、間髪入れずにクラッチ怯みを誘発させることを実現しています。

粘着石強化撃ちスタン値がマジでKUSO

粘着石強化撃ち1発分のスタン値って毎回固定じゃないんですよ(ゴミ)。攻撃が入る直前に強化撃ちすることで着弾数が倍増する?っぽくて強化撃ちを複数回すると全然安定しなかったので、今回はスタン値蓄積の強化撃ちは1発に留め、かつディレイをかけて炸裂してバグり得る回数の削減とバグ回避を意識しました。強化撃ちスタン値が毎回安定すればスタンを最大限に有効活用したチャートも考える余地はありましたが、不安定なせいで半月は大沼にはまってたので、途中でスタンのタイミングを最後に変更し、それまでに着実に抜刀でスタン値を稼ぎ、強化撃ちに頼りすぎないようにしました。

さて今回のスタン値調整についてですが、粘着石強化撃ち1発+抜刀術【力】(14本)でぎりスタンしないように調整して、強化撃ち2発目直後に相方に15本目の抜刀を入れてもらってスタンさせるという方法をとりました。なぜ抜刀14本でスタンしないギリ調整にしたかというと、壁ドン後の咆哮2回目直後に理想個体であるランダム雷を引いた際にチャート上抜刀回数が最低本数となり、クラッチ怯み2回目後の咆哮時点で13本入るので、最後の咆哮時に筆者の14本目の抜刀でスタンさせず、強化撃ちを含めた相方の15本目の抜刀でスタンさせたいためです。

強化撃ちをせず14本目と15本目の抜刀を同時に入れてスタンさせる調整でよいのでは?という疑問が生まれるかもしれませんが、先述の通り粘着石強化撃ちスタン値があまりにもブラックボックスで抜刀の微弱なスタン値で正確な調整をするのは非現実的だったので、追加の強化撃ちを入れて相方に着弾した粘着石を1回炸裂させてもらって瞬間的に高いスタン値を稼ぎ、安定スタンを実現させるようにしています。

ちなみに我々の検証の結果、抜刀術【力】は傷付けにも乗り、スタン値は溜め段階の影響を受けず、KO術の効果は乗りました。

終わりに

いかがだったでしょうか。チャートゲー好きには至極当たり前の内容だったかもしれませんが、ある程度は書ききれたと思います。更に細分化すれば無限に書くことが出てきますが、あまりにも長くなるので気が向いたときにまた別で記事にするかもです。ほなまた~

 

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();
}

アルバトリオンを2発(11万ダメージ)56秒で討伐した

前回のRISEカムラポイント稼ぎマクロの記事で続きを更新すると言っていつの間にか1年経ちました。しかしここに記したのはアイスボーンのアルバトリオンを爆速で倒した時のチャートや武器種・装備構成、グリッチ竜杭砲についてです。今回は真面目に書くので許してください。

まずは動画をご覧ください。

youtu.be

それではてきt-に本題に入ります。

通常の竜杭砲は1発につき1本の杭が刺さりますが、1発につき複数本の杭が刺さるのがグリッチ竜杭砲です。動画ではこれをいい感じに利用して、1発万7万超えダメージを叩きだしてます。アルバでは理論上8万ダメージも可能です。頭おかしい。

【追記】

(筆者はグリッチの第一発見者がどなたかはわかりかねますが、グリッチに関する記事が見つからなかったので簡単に書きました。YouTubeに動画として投稿されている方は複数名いらっしゃいます)

複数本の杭が刺さる要因

爆弾、雪だるま、ハンターなどの設置物を目標の部位に設置し、それらに竜杭砲を接触させることによって設置物の数に応じた杭が刺さるという処理が発生します。ただし、杭はモンスターの部位に刺さるものであり、設置物に刺さりっぱなしになるものではないことから、設置物に重なるようにモンスターの部位が位置していると設置物によって発生した処理が部位に当たったと見なされ、デフォルトの1本に加えて更に本数が増えるという仕組みになっていると考えられます(多分)。

先に述べた通り杭が増える本数は設置物1個につき1本です。たとえば4人マルチの場合、1人につき爆弾2個と雪だるま1個を設置できるので、12個の物体をぴったり重なるように設置すれば12本の杭を増やせます。さらにその物体に重なるように3人のハンターが立つことにより、ガンサー以外の3人が自ら設置物となって計15本の杭を増量させられます。

また、設置物のほかに粘着石を目標の部位に取り付けることによって本数を増やすことも可能です。通常の粘着石1発を投げ付けても1本の杭しか増えませんが、粘着石全弾発射時(2個)は2本、粘着石強化撃ち1発では4本(恐らくゼロ距離で杭を刺した場合)の杭を増やせます(複数回強化撃ちすることによって必ずしも本数が増えるかというと微妙)。ちなみに、アルバトリオンが天空から降らす氷塊も設置物と見なされるので、うまく貫通させて目標の部位に刺すことができれば1本の杭が増えます。

グリッチの実現性

前項に記載した通り、設置物をほぼぴったり設置する必要があるので、人数が増えると極めて実現性は低くなります(練度次第)。その上、設置物や粘着石を使用する場合も共通して、竜杭砲前のモーションで設置物や粘着石を破裂させないように竜杭砲のみをヒットさせる必要があるのでガンサーの難易度がかなり高いです(これまた練度次第)。しかし、マルチに限ってはこれらの問題点を差し置いて容易に実現できる方法があります。具体的には、竜杭砲の差し込みモーション直前に他のメンバーに粘着石を取り付けてもらう方法です。ガンランスのモーションについて理解していれば普段狩りでも簡単に利用できる上に、ワンチャン普段狩りで気付かないうちにグリッチが発生しているかもしれません。アルバ狩りでガンサーがいてぶっ飛んだタイムが出る時はグリッチが発生している可能性は高いです。56秒で倒した動画では粘着石を破裂させないような、ぎりぎり砲撃射程に入らいない位置から杭を差し込んでいますが、粘着石を竜杭砲直前に付けてもらう方法をメインとした立ち回りの動画もあるので以下のリンクから是非ご覧ください。

youtu.be

チャートについて

そもそも1分切りチャートが組めるかどうかの前にダメージ計算をする必要があります。竜杭砲のモーションを分離すると、突き立て、食い込み、炸裂×14発(PS4は13発)、爆発の4モーションになります。動画では最初の突き立てのダメージは含まれないのと、食い込みは極小ダメージでありグリッチによってヒット数が増えないのでないものとして考えると、杭1本あたりのダメージは

(204 × 14) + 67 = 2,923ダメージ

また、アサシンの装衣(未発見時ダメージ1.5倍)の効果が発動したとき、

2,923 × 1.5 = 4384.5 ≒ 4385ダメージ

アルバのマルチ体力は118,150、ぶっ飛ばしや爆弾によるダメージなどその他諸々を差し引くとおよそ110,000ダメージを叩きだす必要があります。したがって、アサシン発動時と未発動時にそれぞれ同じ本数刺した時にアルバを倒しきるのに必要な杭の本数は

110,000 / {(2,923 + 4385) / 2 } = 30.103... ≒ 30本

実際はアサシン時に一挙に本数を稼ぐので、これより少ない本数で済みます。

次にこの杭30本を1分以内に刺しきれるかどうかを考えます。明らかに1発の竜杭砲では刺しきれないですが、全員分の設置物や粘着石を干渉させれば最低でも竜杭砲2発で倒しきることができそうです。

理論上竜杭砲2発で倒し切れることがわかったので、どのようにして2発撃つかを考えていきます。今回の目標タイムは1分切りだったので、数ある拘束手段(ぶっ飛ばしダウン、麻痺、睡眠、スタン、クラッチ怯み、抑制ダウン)からどの手段を連続でとるかがキーとなりました。睡眠は非怒り肉質(怒り時は1.2倍の肉質に軟化、挑戦者も発動)となるのでダメージ不足の懸念、クラッチ怯みは位置ズレや拘束時間の短さから選択肢から除外しました。そこで考えたのが以下の2パターンでした。(※火事場調整の開幕初手火ブレス厳選は一般的なのでここでは説明を割愛させて頂きます。)

①咆哮→初手火ブレス→抑制ダウン→スタン

②咆哮→初手火ブレス→ぶっ飛ばしダウン→麻痺→スタン

とりあえず①のチャートから試してみました。ガンサーがクラッチして3回殴って怒らせる間に、他3人が属性ゴリゴリ双剣で後脚を一斉に斬って属性値を一挙に稼ぐという算段でしたが、微妙に属性値が足りず1モーション以上動かせてしまったり、ダウンしてから傷付けて粘着石を拾ったり、設置物を置いたり、アサシンの装衣発動のためのけむり玉を撒いたりと、ほぼ時間的な余裕がなかったのでボツとなりました。(そもそも1分をオーバーしている説もある)

したがって必然的に②のチャートで取り掛かることになりました。ぶっ飛ばしダウン→麻痺までの流れから一見竜杭砲を2発撃つように思えますが、ぶっ飛ばしダウン時に粘着石取り付けやタルGや雪だるまの設置、けむり玉の散布を済ませ、設置物からアルバの頭が離れないように若干設置物寄りに振り向かせてから怒り咆哮をさせ、その直後に麻痺を取ることによって位置ズレを防いだり拘束時間を長くして1発の竜杭砲を刺しています。ぶっ飛ばしダウンと麻痺を繋げて長い拘束時間を確保するのは、アサシンの装衣発動による圧倒的なダメージ補正を生かし、なんとしても一度に大量の杭を差し込むためです。

ここで重要な点が2つあり、1つはぶっ飛ばしダウン中の設置物の位置です。普通に考えたら頭に置きますが、動画では翼の爪あたりに置いています。これは麻痺後のスタン時の位置に雪だるまが置けない(大体壁付近)という謎の仕様を回避するためです。よって翼の爪付近に設置物を置くことにより、咆哮時に壁に若干背くような調整を可能にしています。

2つ目は、設置物を置く順番が重要です。雪だるまは重なるように設置することが不可能なので4人で一斉に同時に設置しています。このタイミングを目視で把握し易くするために、置き始めが遅い者を注意深く目で追ってタイミングを合わせるといった工夫を凝らしています。

長々とぶっ飛ばしダウンと麻痺について書きましたが、スタンについての補足事項は特にありません。強いて言うならガンサーは竜杭砲のリロードしなければならないので設置物を置けないくらいです。

武器種・装備構成について

まずはガンランスについて説明します。具体的な装備は以下の画像の通りです。

なぜ会心関係のスキルがほとんど発動していないか疑問に思う方がいるかもしれません。理由は、竜杭砲の最初の突きダメージ以外の主要な炸裂ダメージには会心率による影響はなく、物理依存となるためです。したがって、攻撃力を上げるスキルのみ発動させればよくなります。カスタム強化に会心強化を採用していないのもそのためです。

逆恨みを発動させるために龍紋3部位による自傷ダメージ(もぅマヂ無理。。リスカしょ。。)を用いており、火事場調整との兼ね合いがあるので体力増強を3まで積んで極力多めの体力で始動します。防具はフル強化で、火属性やられを自然治癒させてもぎりぎりリスカダメージで死なない調整となっています。

アイテム使用強化を発動させているのは、1発目の竜杭砲の直前に怪力の丸薬を飲んでも2発目まで安定して効果を持続させるためです。1発目から2発目までのクールタイムがちょうど20秒程度なので、デフォルトの20秒だとぎりぎり足りません。結果的に効果時間は数秒長ければ十分だったのでアイテム使用強化は1で事足りますが、チャートを検証しながらやっていく上でいちいち装備をいじるのがめんどくさかったので3のままです。

ここで更に重要なポイントがあります。それは武器の重ね着です。モンスターハンターワールドのガンランスは武器によってリーチが異なり、重ね着もそれに影響します。また、有志によって検証された結果、クシャルダオラガンランスが最長リーチの持ち主ということが判明しています。単純に考えると最長リーチで設置物に刺すと、長すぎてハンター自身を遠ざけてしまって肝心の頭に届かないと思いがちです。しかし、ガンランスの砲撃射程の先端自体の位置は設置物を破裂させないぎりぎりであることは変わらず、竜杭砲の突き時に前進する距離がリーチによって変動するので、リーチが長いほど安定して頭まで届かせることができます。実際に筆者は普段狩りでは臨界ブラキの重ね着を使用していたので今回の1分切りチャレンジでも最初はそのまま使用していましたが、なかなか頭まで届かず、刺すことができませんでした。そこでクシャルダオラの重ね着にかえてみると、圧倒的に長さを感じる上に杭も刺さりまくりました。慣れている武器の方が良いと最初は思っていましたが、大間違いだったので設置物に刺すことを想定しているのであればクシャルダオラガンランスを使うことを強くお勧めします。(普段狩りでは長すぎて個人的に使いにくい)

ガンランスについては以上で、以降は他のメンバー3人の武器種や装備構成についてどのように決めていったか解説します。

先に述べたように、2発で倒し切るためには1発あたり杭15本前後を刺す必要があります。当然設置物だけでは火力不足なので、粘着石を利用する必要があります。そこで、短時間で効率よくヒット数を増やせる粘着石強化撃ち役が必要だと考えました。また、粘着石はスタン値が高いのでスタン役も兼任できることがわかります。1人でスタンをさせられるか不安だったので、実際にはKO極意を発動させて粘着石強化撃ち2発(1発でもスタンを確認済み)でスタンさせています。また、ぶっ飛ばしダウン中とスタン中のそれぞれに2回連続で強化撃ちをして杭の本数を増やす下準備をするので連続で強化撃ちできる武器種が必要です(恐らく同じ箇所に連続で強化撃ちしてもヒット数は増えないので保険)。これを可能とするのが片手剣とランスです。今回片手剣を採用した理由は、ランスに比べて納刀速度が速く、設置物を置く余裕が若干生まれるためです。

また、麻痺はガンランスと片手剣以外の人が担う必要があります。更には、ぶっ飛ばしダウンで設置物やけむり玉などのアイテムも使用するため、ぶっ飛ばしダウンまでに麻痺蓄積値を麻痺るギリギリまで蓄積させなければなりません。そこで

 

選ばれたのはザルファーアローでした。

 

宗教上の理由でライトボウガンは使えないので、弓のザルファーアローが最適解だという見解に至りました。採用された理由は、以下の3点です。

①属性のパーツ強化ができる

②属性カスタム4個(フル)取り付けられる

③数少ない麻痺ビン強化付き弓

最強ですね。これに麻痺属性強化4、ネコ飯の特殊攻撃強化、災禍転福、龍脈覚醒(火耐性を下げて転福発動をさせるため真龍脈覚醒ではない)を発動させて開幕の初手火ブレスで火属性やられをもらい、耐属2で1チャージステップで即刻火やられを回復させ災禍転福を回収します。真会心撃【特殊】というぶっ飛んだ状態異常値上昇スキルもありますが、ぶっ飛ばす直前の殴りで方向転換している最中のアルバの腹に確実にヒットさせることは困難だと思い、会心に関係なく安定して蓄積できるよう装備を組みました。

ここまでで、ガンス、片手剣、弓という武器種構成は確定しました。それではあと一種を何にするかです。考えられる役は2つあり、片手剣と同様に粘着石を増やす役か、狩猟笛で火力を底上げする役という2択になります。前者を試した結果、スタンまで通しても龍活性状態にさせることはできませんでした。片手剣1人が強化撃ちを2回している時に薄々気づいてましたが、やはり粘着石は付ける位置をずらさないと元々付いていた粘着石が破裂してヒット数が増えないことが原因?なんですかね?わかりません。ということで、粘着石のヒット数に頼らずに安定して火力を底上げできる狩猟笛が採用となりました。もしガンサーがアサシンの装衣を着ないなら回避の装衣を着るという択もありますが、回避の装衣を着てもステータス上の攻撃力がカンストして頭打ちしてしまいます。そこで回避の装衣の代わりに狩猟笛の攻撃旋律でカンストさせることで装衣が1枠自由となり、ステータス上の攻撃力ではなくダメージそのものを1.5倍にするアサシンの装衣を着て圧倒的な超高火力を叩き出すことが可能というわけです。

最後に、ここまでの長大な前置きがあってようやく説明できるかなり重要な点があります。もはや装備どころかチャートにも関係ないですが、それはクエストを受ける人やその順番です。今回開幕ぶっ飛ばしを行うのは消去法でガンサーとなったので、最速で入場することが求められます。ガンサーはキャンプで石ころだけ拾って翼竜で飛んでいくだけなので、石ころに最も近い位置に着地するために3番目にクエストに参加します。また、各種バフの摂取は入場の高速化においてロスとなるので、他メンバーに鬼人の粉塵の散布してもらったり、広域化を付けてもらって鬼人薬Gの効果を得ています。狩猟笛を担ぐ人はキャンプで旋律を調えるのでガンサーを怯ませてしまう可能性があり、4番目固定となります。ホストと2番目の参加者は片手剣でも弓でも自由なので、宵の恒星を受注できる人かつ回線が安定している人が優先的にホストを担当します。しかしここで1つ懸念が浮上します。頭を傷付けて粘着石を通させる役割を担う人がホストかそうでないかで粘着石の落下位置にズレが生じる事です。今回のチャートではいずれの場合でも大きな支障をきたさなかったのでたまたま無事でした。

最後に

長々と拙い解説を閲覧していただきありがとうございます。他のメンバーの詳しい装備の詳細は下記のURLから動画にアクセスしてご確認ください。その他不明な点があればYouTubeのコメント欄か、このブログのどこかに質問できるチャット欄的なのがある気がするのでそちらまでお願いします。

 

他メンバーの動画⬇️

・ゴンザエモン氏(狩猟笛)

アルバトリオンを56秒で討伐 - YouTube

・ダンナーモス氏(弓)

フルスピードでアルバトリオンを倒すのが俺の人生だった - YouTube

・ブッチャーお肉さん(片手剣)

56秒トリオーン - YouTube

全自動カムラポイント回収機作ってみた

 

 

f:id:DonkeyKonbu:20210520052534p:plain

「強走薬とお食事券いっぱいほち~~~~~!!!!」

全自動カムラポイント回収機を作るきっかけとなったのはつまりそういうことです。
特にマイコンをいじってた経験もなく、C言語Pythonなどがが多少わかる程度の一般人ですが、自動化でメジャーなポケ〇ン自動孵化や自動ワット稼ぎについてググったら案外簡単かつ安価で作れそうだったので

「モンハンの作業ゲーも自動化してやろう!」

と思い切って作ることを決めました。後ほど作り方説明しますが、まずはどんな感じか動画をご覧ください。

どうでしょうか?
人間が操作しなくてもこのような動きが簡単に行えるのです。ではこれから何が必要で、どのようにして作っているのかをざっくりと解説していきたいと思います。

準備するもの

必要なものは以上です。めちゃめちゃ古いPCや、リンクで貼り付けたようなPCでなければ多分大丈夫です。

Arduino Leonardoというやつが今回使っていくマイクロコンピュータ、いわゆるマイコンです。他にもArduino UNOなどありますが、マイコン経験ゼロでよくわかんないのでポケモン自動孵化関連のサイトで紹介されたたものと同じものを購入しました。リンク貼り付けたのは3つセットなので単体で買えばもっと安く済むと思います。

秋葉原とか難波にも売ってそう。知らんけど。

テレビ接続時に使うUSBケーブルは、昔のアンドロイドとかPS4コントローラーの充電ケーブルとして使っているものと同じタイプなので流用しても構いません。

 

予備知識

プログラミングに関する知識が多少必要ですが、初心者でも簡単に書けるほどのレベルなので諦めないでください。本当に簡単です。

全自動カムラポイント回収機を作るにあたって最低限知っておいたほう方がよいプログラミング言語・基本文法はC言語のfor文、自作関数程度です。ボタン操作に関する関数は、有志によって作られたNintendoSwitchControlLibraryというライブラリをインクルードすることによって簡単に書くことができます。具体的な記述方法はダウンロードページに記載されています。

github.com
メルカリで許可なく売られる可能性があるので、ここでは自分の書いたコードを全部載せることはしませんが、今後不定期で簡単な操作の記述方法や、作っておくと楽な関数について解説していこうかなぁと思っております。

 

環境の導入

Arduino IDEというソフトをインストールして実際に書いていくのですが、書く前に先程紹介したNintendoSwicthControlLibraryをインストールし、Arduino IDEに追加しましょう。Switchを動かすためのArduino IDEの設定や、ライブラリの追加方法などは、詳しく書いていただいている方がいらっしゃるので、以下のリンクから飛んで参考にしてください。ポケモンでもモンハンでも同じSwitchのソフトなので同様の作業をすれば大丈夫です。

雑ですみません。

マイコンを導入して、ポケモン剣盾を自動化しよう!【Mac・Windows】|ポケモニット

 

作業の流れ

準備物を調える 

開発環境を調える

コード書く

実機で検証

コード書く

実機で検証

コード書く

\^o^/

って感じです。雑ですみません。長い操作をしようと思うと無限にこれの繰り返しです。これを楽しいと思うか楽しくないと思うかはあなた次第と言いたいところですが実際楽しいです。思った通りに動いてくれた時の快感はたまりません。気付いたら20時間溶けますから。

 

コードを書くにあたって意識したこと

時間指定で操作を書き込むので、フレームレートの不安定性の影響で特にLスティックの視点操作に若干の差が出てきます。対処法としては、そもそも視点操作をせずにキャラを動かすか、Lスティックを使わずLボタンのみの視点移動(正面向き)に縛るくらいです。ただ、Lスティック操作によるズレが生じても自分の調整次第によっては思い通りに動いてくれます。

しかしそのようなずれが生じた場合でも、壁の角に挟まるように走って位置を固定(動画では3:43あたり)したり、崖飛び降り時に壁に沿ってAボタン連打ダッシュすることで必ず決まった位置で宙吊り状態(動画では2:20あたり)を作ることができます。

また、翔蟲使用したときや飛び降りた時の着地硬直時間をカットすると割と時間短縮に繋がるのでおすすめです。

 

最後に

かなりざっくりとした全体的な流れとコーディングに当たっての留意点を述べました。これだけではまだ

「どんなもん書いとるんじゃあああ!!!」

という方がほとんどだと思います。ということで実際にどのようなコードを書いているのかを次回以降で説明していきたいと思います。