机の上のおもちゃ箱

読み易さ、書き方は記事内容によって変化します。気が向いたら書きたい事を書く自由帳です。

【解説記事】初心者向け7世代乱数調整の解説を書き直してみた。【ポケモンUSUM】

※2年くらい更新してないので、古い手法だったりが多いです。書き直す元気は無いので、記事途中に出てくるDiscordサーバーで新しい情報を拾ってください。(2023.12.09追加)

 

 

タイトルの通り、丁度昨年の7月に書いた記事をもっと読みやすくて理解しやすいものに書き直すのが本日のお題。

↓去年書いた記事(なんか検索上位でHitするらしい)

you396.hatenadiary.jp

 

 

【2022/08/06追記】

ーーーーーーーーー

リアルがずっと忙しかったのとモチベが死んで更新してませんでした。
乱数鯖のTSV finderがいつの間にか止まってたらしい。
有志の方が代替で使えそうなツールを公開していたので、申し訳程度に投げておきます。

github.com

Sourceで中身の処理を軽く覗いた感じは大丈夫そうでした。

付属の「README.md」におおよそ使い方とか書いてあったので、他の人に迷惑をかけない範囲で使いましょう。

(.mdを開けないって人は拡張子を.txtとかに変えるか、ブラウザにドラッグすれば見れるよ多分)

 

なので、下記のDiscordには入らなくてもOK。

入っておいた方が困った時に質問投げれて良いと思うけど。

 

追記おしまい

実はこの記事を消すか悩んでいる。

ーーーーーーーーー

前提としてPCを使って7世代乱数を行う方法の解説なので、本記事もPCで閲覧している前提のレイアウトで書きます。
(スマホで見に来てくれた人、申し訳ない…)

 

 前置きが長くなる前に本題へ。

 

 

 

【基礎編】そもそも色違い乱数調整って?

f:id:YouMashiro:20210705184234p:plain

「乱数調整」そのものに初めて触れる人には漠然としていて理解しづらいと思うのでイメージの話をします。

扉

あなたは今、4000個以上ある「番号が割り振られた扉」の前に立っています。
そして「どの番号の扉を開けられるのか分からない」を1本持っています。

あなたはどうやって正しい扉に辿り着きますか?

 

この時、あなたが取れる行動は2つあります。

A.鍵が合うまで、闇雲に鍵を差し込み続ける。
B.持っている鍵の番号を特定して、その番号の扉のみを狙って鍵を差し込む。

 運が良ければ早いのはAですが、確実性が高いのはBですね。

 

色違い乱数調整はBの行動をゲーム内で行うことを意味します。

 

 

7世代の乱数調整は大きく分けて2パターン

f:id:YouMashiro:20210707160716p:plain

7世代の乱数調整は大きく分けて固定乱数孵化乱数の2つに分類されます。
それぞれ全く違うロジックで機能している疑似乱数のため、7世代乱数を始めたい人は2種類の乱数調整を覚えることになると思っておいてください。

 

固定乱数の特徴

・ 旧作でも使用されていたお馴染みの乱数調整
・時間経過で勝手に消費が行われる=ゲーム操作の正確さが重要
野生出現や固定シンボルなどに適応可能
初期seed特定→現在位置特定→目的値まで消費の流れが基本
・使用される乱数生成器:SFMT(知らなくてOK)

 一部の画面を除き、ポケモンを起動している間は常にフレームの消費が行われ続けているため、目的値を通り過ぎてしまうとその目的値には戻ることが出来ない。

 

7世代の固定乱数は人為的に「同じ初期seed」を取得し得ないため、他世代に比べて面倒くさい部類。
乱数を行なう度に初期seedの特定作業が必要になってしまい、目標個体までの待機時間も一定ではない。

 ちなみにGoogleの候補検索で名前が上がる「固定孵化」とコレはまったくの別物。
(固定孵化に関してはパンオレさん等の文献を参照してください。)

 

孵化乱数の特徴

・7世代固有の乱数調整
・時間経過では消費が発生しない
孵化できるポケモンならば、誰にでも適応可能
・現在seedを忘れなければ、以後は目的値までの消費を続けるだけで良い
・使用される乱数生成器:TinyMT(知らなくてOK)

7世代に於けるタマゴ生成時の処理は、過去作のものとは完全に異なる。
そのため、この手法は完全に7世代限定のものになる。

 

行われている処理については下記記事の「処理スキーム」の項目を読むと良いです。
(理解できるかは知らない) 

blastoise-x.hatenablog.com

 

 

 

TSV?PSV?なにそれ??

f:id:YouMashiro:20210707010219p:plain

 この記事に来た人の多くは「色違いが欲しい」が目的だと思うので、分かってない人は必ず読んで理解しておいてください

 端的に言えば、TSV(trainer shiny value)は トレーナー1人1人に割り振られた番号、PSV(pokemon shiny value)ポケモン1匹1匹に割り振られている番号のことを指します。

 

用語の正式名なんてどうでも良いので

『TSVとPSVが合致すると色違いポケモンが出る』

この事実だけ覚えれば、理解としては充分です。

つまり何をすればよいの??

乱数調整では予め特定しておいたTSVに対して、合致するPSVを作為的に巡り合わせる作業を行っていきます。

先程の『扉と鍵』の喩え話に置き換えて説明するのであれば、TSVの特定は持っている鍵の番号を特定することにあたります。

f:id:YouMashiro:20210705221750p:plain
持っている鍵の番号(TSV)さえ特定できてしまえば、後は同じ番号の扉(PSV)を狙い続けていたら扉が開く(色違いが出る)のは必然です。

 ちなみにAの行動をゲーム内で表現するならば「エンカウント→色違いじゃないからリセット!」を色違いが出るまで続ける自然遭遇待ちですね。 

 

【準備編】7世代の乱数調整に必要なもの

ポケモンSM、USUMがプレイできる環境

f:id:YouMashiro:20210705192915p:plainf:id:YouMashiro:20210705192927p:plain

コンテンツ量を加味すると、新規データで始められるUS(ウルトラサン)UM(ウルトラムーン)のROMを持っておくのが好ましいです。
なんなら両方2つずつくらいは買いましょう。

もちろん、サンムーンの既存データでそのまま乱数調整を行うことも可能です。

実機は3DS,3DS LL,2DSなどありますが、正常に動くのであれば、どれであっても問題ありません。
必須ではありませんが、「偽トロキャプチャー」のようなゲーム映像をパソコンに出力できる機能を搭載した実機を持っていると乱数調整は捗ります。

 

個人的には、実機2台+育成用ROM1個+乱数用のデータを消しても良いROM1個がある環境がベストですね。

 

Discord

f:id:YouMashiro:20210705223245p:plain

既存の解説記事の多くで使用されている「TSV Search ver.2(現在非公開)」の代替として必要です。

 

PC、スマホ、Web版なんでもいいのでアカウントを取得しましょう。
Discord内で利用できるツールが目当てなので、通話環境などは整っていなくても大丈夫です。

アカウントを取得したら「ポケモン乱数調整」というサーバーに参加しましょう。

 

↓サーバーへの招待リンク

discord.com

7世代問わずポケモン乱数調整をするならば、上記のDiscordサーバーに入るのが最短です。
というかココに入ればこの記事読まなくて良いまである。

 

なので入りましょう。(直球)
あと、楽しく利用するためにルールはちゃんと読みましょう

 

3DS RNG tool

github.com

 

GitHubにて無料ダウンロードが可能です。
7世代の乱数調整を新規で始める場合は代用不可なツールになっています。

3DSRNGTool.exeをダウンロードしてください。

下2つのソースコード(zip/tar.gz)は不要です。
(※ダウンロードは自己責任でお願いします)

f:id:YouMashiro:20210815160502p:plain




f:id:YouMashiro:20210707194739p:plain

ダウンロードしたら「options」から言語を日本語に変更しておきましょう。
(本記事内での解説は全て日本語準拠で行います。)

 

 

シンプルタイマー

emtimer.mizdra.netいわゆる「エメタイマー」です。
どこのタイマーを使っても良いですが、こだわりが無いのであれば上記サイトをブックマーク設定しておくことを個人的に推奨します。(使いやすいです)

 

 

【実践編】TSVの特定

①最初に貰った御三家の個体値を調べる

 USUM】御三家はどれがおすすめ?ストーリーをクリアするために!【ポケモンウルトラサンムーン】 - ゲームウィズ(GameWith)

ストーリー上でハラもしくはククイ博士に御三家を貰うと思うので 、なんとかして個体値を調べましょう

努力値が振られてしまっていると正確な個体値が分からないので、木の実で下げる等は各々工夫してください。 

もし王冠で個体値を鍛えてしまった場合、対応するパワー系アイテムを駆使すれば元の個体値を子供に遺伝させられるので、なんとかしましょう。

この後の作業で躓く初心者の大多数は、この特定作業がいい加減なせいで失敗します。

②Discordで個体値情報を打ち込む

f:id:YouMashiro:20210705224340p:plain
Discordサーバー内のスゴい人が作ったbotTSV Finder」チャンがいます。
去年、僕が記事を公開した数日後に実装されたみたいなんだけど、記事の方に追記するのが面倒で放置してました、ごめんなさい

 前項目で求めた個体情報を用いて「#gen7-tsv-finder」チャンネル内で以下のようにナンパしまsy発言します。

 !tsvcheck [ROMのバージョン] [トレーナーID] [H A B C D S] [性格]

(他の利用者の使用ログが残ってるので、それを参考に打てばOKです) 

 

f:id:YouMashiro:20210802133337p:plain
「#ルールなど」のチャンネルに既に書かれていますが、個体値の候補をしらみ潰しに全部試すのは絶対にやめましょう

botを作った人にかなり迷惑を掛けることになります。

サーバー参加者全員が利用不能になりかねないので、本当に気をつけて利用してください。

 

正しく入力できていれば、数秒後にbotから以下のような返事が帰ってきます。

f:id:YouMashiro:20210706000255p:plain

これでTSVの特定は終了です。

TSVが特定できれば孵化乱数固定乱数のどちらも始められるので、始めたい方の解説に進んでください。

 

コマンドが合っているのに返事が帰ってこない時は、botがオフライン(≒機能停止)になっている可能性があります。そのうちオンラインに戻るので、時間を改めて特定を依頼しましょう。もし2~3日動いてなかったら「#Gen7」などで報告してあげてください。

f:id:YouMashiro:20210915132953p:plain

一緒に出てきたTRVって?

botからの返信で一緒にTRVも出力されていると思います。
TRVは8世代での色違いエフェクトを◇にしたい時に必要になってくる値です。

f:id:YouMashiro:20210706000759p:plain

 

菱形色違いに関する解説は過去に書いてるのでそっちを見てね。

you396.hatenadiary.jp

③「候補が見つかりませんでした。」と言われた時は…

まずは入力ミスがないか確認しましょう。

入力にミスがなく、特定した個体値にも誤りがなかった場合、残念ですがbotでTSVを割り出せないデータになっています。

おそらく…
・TNを決定する時に「いいえ」を押した。
・御三家を受け取るまでにリセットをした。
のどちらかをやらかしています。

次項目以降でbotの原理を交えて、「なぜ、あなたのデータは特定できないのか?」を解説していきます。
それを踏まえて、どうするかを決めましょう。

 そもそも、botはどうやって特定しているのか? 

f:id:YouMashiro:20210707014147p:plain

主人公の「トレーナーID」、御三家の「個体値情報」と「性格情報」の3つの数値を満たしている初期seedを絞り込む。

初期seedが絞り込めれば、トレーナーIDを構成する情報(≒TSVとTRV)にも辿り着ける。

  TSV FinderのTSV特定のアルゴリズムは超ざっくり書くと上記みたいな感じ(のはず)です。

途中でリセットを挟んではいけない

上記の方法は
御三家の受取時に参照された初期seed=トレーナーID決定時に参照された初期seed
の関係が成立しているから出来るものです。

ここでの「初期seed」はゲームを起動する度に新たなものに置き換わってしまうため、特定作業の途中でレポート&リセットを挟んでしまうと、この方法は使用できなくなります。

f:id:YouMashiro:20210707021435p:plain

 

 TNを決定する時に「いいえ」を押してはいけない

f:id:YouMashiro:20210707161726p:plain

ククイ博士に「(TNは)〇〇でいいかい?」と確認された際に「いいえ」を押した場合、ゲーム開始からトレーナーIDの決定までの間に余計な消費を発生させてしまうため、botの検索範囲から漏れます。(詳しくは知らない)

 

ちなみに7世代のID調整はこの仕組みを逆に利用し、TN確認の直前に現れる時計の針を複数回表示させることで初期seedを求め、そこから目的IDまで調整を行います。

 ID調整に興味がある人はこっち読んでください。
※記事内ではSunMoon RNG Toolを使っていますが、3DS RNG Toolでも同様の事ができるので代用してください。

blastoise-x.hatenablog.com

 

 

 

④理屈を知った上で…

悪いことは言わないのでTSV Finderで特定できなかったときは

 

 

 

大人しくゲームデータを消して①からやり直しましょう

 

 

 

 

 

どうしても、現在のデータでやりたい人は以下の方法を試してください。

代案1,孵化で色違いを自力でまず1匹出す

tunu1223.blog.fc2.com

生まれた色違いポケモンからTSVを逆算する方法です。

上記事のように個体値情報からTSVを割り出すことも出来ますが、どうせ孵化をやるならついでに孵化乱数での現在位置を特定しておきましょう。

そうしたほうがツールを弄る項数が減るので、初心者には良いと思います。

 

順序としては以下の作業フローで進めてください。

1,コイキングを8匹or127匹孵化して、孵化乱数の現在seedを特定
▼後述の「現在seed(Egg Seed)の特定」を参照

2,特定した現在seedを3DS RNG Toolの「CurrentStatus」欄に入力しておく

 ↓

3,色違いが出るまで孵化し続ける
受取拒否は禁止何匹受け取ったかをカウントしておく

4,色違いになった個体を3DS RNG Toolの連続孵化リストで参照
※2の後から何匹目に受け取った個体かを覚えているとスムーズ

5,合致した個体のPSVがそのROMのTSV

 

 サラッと書いてますが、色違いが出るまで孵化し続ける必要があるので普通に苦行です。

 

1をやっている最中に色違いが出ちゃったレアケースな人は下の記事を参考にしてください。

tunu1223.blog.fc2.com

代案2,バトルビデオのデータから特定する

prismapsr.hateblo.jp

7世代のバトルビデオ機能を用いて特定する方法です。

端的にやっていることを説明すると、バトルビデオの保存データを吸い出してPC内でそのデータの解析を行います。

 データの吸出し行為そのものがアウト寄りなので、あまりオススメはしません
でも7世代の利用規約を纏めていた「PGL」がサービス終了したから、もしやセーフ?

f:id:YouMashiro:20210707053558p:plain

ちなみにKeySAVeをダウンロードしなくても、3DS RNG Toolには「KeyBV」という代用機能が付いています。
(「ツール」→「KeyBV」で開けます。)

【実践編】孵化乱数に挑戦

①現在seed(Egg Seed)の特定

孵化乱数を行うためには、現在seedを知る必要があります。
この現在seedを見失うと、非常に面倒くさいことが起こるので忘れないように管理してください。

 コイキング8匹孵化で特定(条件あり)

www.youtube.com

《動画内での使用ツールの代用について》

・動画時間[4:30~]『Search Tinymt Seed(非公開)
3DS RNG Tool内の『Gen7 Egg Seed Finder』の右側部分でも代用可能。
(「ツール」→「Gen7 Egg Seed Finder」で開けます。)

説明は面倒なので、参考動画に従って特定してください。

この方法を使う条件は「冒険を始めてから1度も預かり屋さんにポケモンを預けていない。」なので、データによっては使えません。

 

以下で紹介している127匹孵化はミスしやすい上にミスに気づき辛いため、ミスすると心が折れそうになります。そのため、基本的にはこっちを推奨します。

乱数調整用にデータを消しても良いROMを持っておきたい理由はコレですね。

コイキング127匹孵化で特定

www.youtube.com

《動画内での使用ツールの代用について》

・動画時間[10:04~]『SM孵化乱数列検索ツール(WEB版)
3DS RNG Tool内の『Gen7 Egg Seed Finder』の左側部分でも代用可能。
(「ツール」→「Gen7 Egg Seed Finder」で開けます。)

・動画時間[11:00~]『Pokemon SunMoon RNG Tool(非公開)
3DS RNG Tool内の『孵化乱数』タブで代用可能。
ただし「異種間孵化」と「同種間孵化」だけは意味が逆なので注意

説明は面倒なので、参考動画に従って特定してください。

ただの苦行です。データ初期化してコイキング8匹孵化をした方がマシです。

②目標個体まで消費

www.youtube.com

《動画内での使用ツールの代用について》

・動画時間[0:23~]『Pokemon SunMoon RNG Tool(非公開)
3DS RNG Tool内の『孵化乱数』タブで代用可能。
※ただし「異種間孵化」と「同種間孵化」だけは意味が逆なので注意

 やることの流れは参考動画と同じです。

 

本項では孵化で色違いを狙う場合に触っておくべき「3DS RNG Tool」の設定箇所を補足しておきます。

f:id:YouMashiro:20210707115440p:plain


上記の8つ+動画内での操作を行えば、目指すべき色違い個体が発見できると思います。

 

目標の色違い個体を発見できたら
1.その個体のFrameに書いてある数字を右上にある「目標消費」に入力

2.「連続孵化リスト」にチェックを切り替える(Shortest Pathは触らない)

3.「計算」を押すと、受取と受取拒否の回数指示が出力される

4.実機で参考動画と同じ作業を行う

 

 《ツール内の未翻訳の英語》

CurrentStatus→現在seed(現在位置)

# of Perfect IVs個体値Vの最低個数(これは0にしておけば良い)

Frame→参考動画内で「消費」にあたる項目

Set as Target Frame→この個体を目標個体(目標消費)に設定

Set as CurrentStatus→この個体のseedを現在seedに設定

Set the  Status after~→この個体を受け取った後のseedを現在seedに設定
 ※動画時間[6:50~]で行っている作業を1クリックで終わらせる操作

③2回目以降の孵化乱数のための準備

ツールからの指示通りに受取と拒否を行い、色違いを孵化できた人は次回以降の孵化乱数のための下準備をそのタイミングで行っておきましょう。

 

今回は仮に「受取232の色違い卵を受け取った後」という設定で説明していきます。

f:id:YouMashiro:20210905234043p:plain

この受取232の卵までを受け取っていた場合、233の卵の欄に書いてある孵化用seedが次回使うseed(CurrentStatus欄に入力する値)になります。

 

今回、受取233の個体欄に書いてある孵化用seedは以下ですね。

[A6878F21 , 06FD4AD9 , 9B01DCFC , 0234DC12]

f:id:YouMashiro:20210905235136p:plain

Set as CurrentStatusを押すと、画面上の「CurrentStatus」の4つの値が新しいものに置き換わっていると思います。

※ちなみに受取232の個体の上で右クリックして、「Set the  Status after~」のほうを押しても同様の処理ができます。前項目で書いておいた《ツール内の未翻訳の英語》のそれぞれの言葉の意味を考えれば、なんで同様になるかの理由はわかると思います。

f:id:YouMashiro:20210906001125p:plain

以上で次回以降の孵化乱数のための準備は終わりです。

次やる時は、今置き換わったseedで「②目標個体まで消費→③2回目以降の孵化乱数のための準備」で説明した流れを行ってください。

この最新のseedを忘れない限り、「①現在seed(Egg Seed)の特定」はやらなくてよくなります。忘れたら127匹孵化するか、データ消して8匹孵化しましょう。

 

④SV孵化について

SV孵化は7世代孵化乱数の応用です。

難しいことは特にしないので、仕組みだけざっくり図解します。

f:id:YouMashiro:20210707130304p:plain

端的に言えば「PSVが確定するタイミング色違いになるタイミングが違うので、PSVが確定している卵を対応したTSVのROMで孵化させると色違いで産まれる。」という簡単な原理です。

 

余談ですが、筆者が色違い全国図鑑を作っていた際は10ROM体制でSV孵化を行っていました。所持しているTSVの数に比例して作業効率が良くなるのでオススメです。

 

色違い全国図鑑に興味がある人は下記の記事を見てね

you396.hatenadiary.jp

【実践編】固定乱数に挑戦

①初期seed,現在位置の特定

www.youtube.com

説明は面倒なので、参考動画に従って特定してください。

この作業は固定乱数の度にやらなければいけない作業のため、体に叩き込んでください。

 

「針を読むの難しい…」という方は下記の記事を参考にしましょう。

紹介されている「NeedleRead」というツールを使用するだけで成功率が飛躍的に上がると思います。

takedpok.hatenablog.com

②目標個体まで消費

www.youtube.com

《動画内使用サイトの代用について》

・動画時間[5:10~]『エメタイマーBIG(サポート終了)

シンプルタイマー等のサイトで代用可能。

 やることの流れは参考動画と同じです。

孵化乱数と異なり、ミリ秒単位の正確な操作が要求されるため、慣れるまでは無限に失敗します。

成功するまで根気強く頑張ってください。

③野生乱数について

www.youtube.com

《動画内使用サイトの代用について》

・動画時間[5:10~]『エメタイマーBIG(サポート終了)

シンプルタイマー等のサイトで代用可能。

 やることの流れは参考動画と同じです。

ここまでで紹介した「固定シンボル」に対して行う固定乱数と仕組みも同じため、前項目を成功させられる人は問題なく成功させられると思います。

動画内ではズガドーン,ツンデツンデに絞って解説されていますが、通常の野生ポケモンなども同様の方法で乱数調整が可能です。

 

具体的には島スキャン、釣りなどで出現するポケモンにも応用が効きます。


ただし7世代は戦闘画面でのフレーム消費速度が一定ではないため、戦闘中に発生する「仲間呼びの連鎖」で呼び出されたポケモンに対しては乱数調整できません。

④受け取るだけの固定乱数

www.youtube.com

《動画内での使用サイトの代用について》

・動画時間[3:27~]『エメタイマーBIG(サポート終了)

シンプルタイマー等のサイトで代用可能。

 やることの流れは参考動画と同じです。

「受け取るだけ」と銘打っていますが、7世代乱数調整の中では最難関の部類です。

 

固定乱数の難易度は
「待機するフィールドのNPC数(消費を早める存在)が多くなればなるほど上がる。」

これをよーーく覚えておきましょう。

 

ちなみにウツロイド等の固定乱数時のNPC数は1です。

 

 

ということで、USUMで色違いに出来る該当ポケモンは以下3匹です。

f:id:YouMashiro:20210707141809p:plain

ベベノムも含めて難易度が桁違いです。

サトピカに関してはNPC数が多い上に、一定ではなく変動するため地獄です。
そのため、挑戦する度に「初期seed特定→NPC数の特定」を行わないと、目標個体への消費作業にすら辿り着けません。

本当に初心者がいきなり手を出すのは、オススメできません

ここら辺はもう7世代乱数の沼なので、詳しく知りたい人は各々調べてください。

ヒント:timeleap

かけらさんのTwitterを気合で見つけましょう。

 

ちなみに筆者は色サトピカ乱数を半月掛けて成功させました。

f:id:YouMashiro:20210707143853p:plain

⑤配達員乱数について

alice-poke930.hatenablog.com

もうUSUMに新規配布が来ないので、紹介する意味がないですが一応参考文献を載せときます。 

やっていることは結局、固定乱数の流れと同じです。

前項目で固定乱数の難易度は
「待機するフィールドのNPC数(消費を早める存在)が多くなればなるほど上がる。」
 と記載しました。

 

配達員が居るポケセンの中で
「1番NPC数が少ないオハナタウンのポケセン」のNPC数は4です。

 

ちなみにベベノムNPC数5です。

難易度は察しましょう。

ヒント:timeleap

あとがき

どうですかね?
1年前のアレよりは、見やすい記事かなと、、、。
(代わりに文字数は9000文字オーバーですが…) 

 

ニーズがある主要な乱数の道筋は網羅したと思うので、深い部分はその都度調べればいいかなと思います。

 

実際のところ、僕がこの記事でしたのは「解説」といより「咀嚼」なので、この記事って盗用みたいなものですよね。

もはや開き直りますけど

 

まぁどうあれ、主要な知識を1から10までまとめて解説してるサイトは見当たらなかったので、一定数の需要はあるかな?と思います。

 

あくまで初心者向けの導入記事なので、実際に乱数をやってみると今回の記事だけではカバーしきれない疑問も浮かび上がってくると思います。

 

 

乱数調整で調べても分からない事があったら、ぜひとも記事中で紹介した乱数調整サーバーに投げましょう。詳しい人がいっぱい居ます。

 

この記事に対するご指摘、文句等はここのコメント欄に投げてください。
(間違ってもサーバーの方に投げないようにお願いします。)

 

分かりやすいと思ってもらえていたら幸いです。

 

後、一気に最後まで読破した人凄いです!

きっと忍耐力ありますよ!!(殴)

 

七夕に間に合ってよかった…(執筆時間:6時間弱)

 

f:id:YouMashiro:20210707224645p:plain