vim-duzzle Any%RTA 1:32.02
この記事はVim Advent Calendar 2021 カレンダー2の12日目の記事です。
Vimにはvim-duzzleという、derisさんという方が作った脱出系パズルゲームがあります。
このゲームは42ステージから構成されるパズルゲームで、Vimの色々な操作を実際に試すことができます。Vimの練習用としてもよくできていて、vimtutorの次にするものとしてとてもいい感じです。想定時間は30分ぐらい。最初はもう少しかかるかもしれません。導入方法は"vim-duzzleの導入手順"にまとめています。
そんなvim-duzzleですが、もし全力で走り切ったらどれくらいかかるのか。気になって今回RTAをやってみました。開始は開始画面の[Press Enter]
を押したタイミング、終了は最終画面に到達したタイミングで計測しています。結果はこちら!
だいたいこれぐらいですね。もうちょっと詰めようはあるかも…?とはいえ1:30.00を切るとなると案外難しそう。グリッチがあれば更に短縮できるかもしれないです。
各ステージ解説
思いっきりネタバレなので注意。短縮ルートを使っている箇所もあるので、最初は何も見ないでやったほうが練習になると思います。念のため折りたたみに。
解説
ステージ | 手順 |
---|---|
Room1 | カウント指定で一瞬。縦の移動量がRoom2以降と異なる点に注意。事故率高 |
Room2 | カウント指定で一瞬 |
Room3 | カウント指定で一瞬 |
Room4 | カウント指定で一瞬ですが回数指定が2桁なので入力ミスに注意 |
Room5 | カウント指定で一瞬ですが回数指定が2桁なので入力ミスに注意 |
Room6 | w+カウント指定で一瞬 |
Room7 | 正攻法が一番 |
Room8 | 正攻法が一番 |
Room9 | 正攻法が一番。,を使おうとしないよう注意 |
Room10 | 正攻法が一番。,を使おうとしないよう注意 |
Room11 | 正攻法が一番。,を使おうとしないよう注意 |
Room12 | 正攻法が一番 |
Room13 | fで中央まで移動すると短縮可。回数指定が2桁なので入力ミスに注意 |
Room14 | w+カウント指定で一瞬。回数指定が2桁なので入力ミスに注意 |
Room15 | 正攻法が一番 |
Room16 | 正攻法が一番 |
Room17 | 正攻法が一番 |
Room18 | fで中央まで移動すると短縮可。回数指定が2桁なので入力ミスに注意 |
Room19 | fで中央まで移動すると短縮可。回数指定が2桁なので入力ミスに注意 |
Room20 | 正攻法が一番 |
Room21 | 正攻法が一番 |
Room22 | 正攻法が一番。遡ると少し早い |
Room23 | 正攻法が一番。遡らないと少し早い |
Room24 | 正攻法が一番。%は括弧より前で使ってOK |
Room25 | 正攻法が一番 |
Room26 | 正攻法が一番。上下の逆転に注意 |
Room27 | 正攻法が一番 |
Room28 | 正攻法が一番 |
Room29 | dt<SPACE>dtgでゴールまで一瞬 |
Room30 | dt<SPACE>dtgでゴールまで一瞬 |
Room31 | dt<SPACE>dtgでゴールまで一瞬 |
Room32 | 正攻法が一番。使う括弧は4番目 |
Room33 | 正攻法が一番。%%とすると少し早い |
Room34 | 正攻法が一番。%%とすると少し早い |
Room35 | 正攻法が一番 |
Room36 | 正攻法が一番。適宜減速すること |
Room36 | 正攻法が一番。適宜減速すること |
Room37 | 正攻法が一番 |
Room38 | 正攻法が一番。使う括弧は2番目 |
Room39 | 正攻法が一番。使う括弧は2番目、3番目、4番目 |
Room40 | 正攻法が一番。使う括弧は最初の括弧、以降は2連続の開き括弧 |
Room41 | カウント指定で一瞬。縦の移動量に注意 |
Room42 | カウント指定で一瞬 |
手順は簡単ですが、やってみると意外と事故します。Vimに慣れているとどこかで必ず存在しないキーを使ってしまうはず。何回か再走しましょう。
各ステージの想定キーストロークは次の通り。
ステージ | キーストローク |
---|---|
Room1 | 3j7l |
Room2 | 4j7l |
Room3 | 4j7l |
Room4 | 4j16l |
Room5 | 23l4j7h |
Room6 | 7w |
Room7 | wjjbjjw |
Room8 | ejjgejjw |
Room9 | fpjjFpjjfg |
Room10 | tpjjTpjjfg |
Room11 | fp;;;jjFp;;;jjfg |
Room12 | fp;;;jj,,,,jjfg |
Room13 | 12f<SPACE>4j |
Room14 | 15w |
Room15 | ^jjj$ |
Room16 | 0jjjjg_ |
Room17 | $3j |
Room18 | 12f<SPACE>12j |
Room19 | 12f<SPACE>4j |
Room20 | /g<CR> |
Room21 | ?g<CR> |
Room22 | w*NNw |
Room23 | w#nnnw |
Room24 | %llllll |
Room25 | %jjjj%jjjj%llllll |
Room26 | %hhhhh%jjjj%llllll |
Room27 | %Fpkkkkfg |
Room28 | df}lllll |
Room29 | lljlldt<SPACE>lljdtg |
Room30 | llllllldt<SPACE>lljdtg |
Room31 | llllllldt<SPACE>lljdtg |
Room32 | lllll%llllll |
Room33 | %%ldf)h%llllll |
Room34 | %%ldt<SPACE>dt<SPACE>h%dtg |
Room35 | jjlljllllll |
Room36 | jjjjjlllllljjljllllljlllllllllllllllljll |
Room37 | }$kk |
Room38 | lll%lll |
Room39 | llll%llll%l%%llll |
Room40 | %l%llll%lll%llllll%lllllllllllllll |
Room41 | 3j7l |
Room42 | 4j7l |
vim-duzzleの導入手順
vim-duzzleはVimのプラグインなので、他のプラグインと同じ方法でインストールすれば大丈夫です。もしプラグインマネージャを使っていなかった場合でも、Vim8から追加されたパッケージ機能を使うと簡単にインストールができるので、その手順を説明します。
Windows
WSL2やMSYS2を使っている場合はLinuxのほうの手順で進めます。
もしVimが手元に無い場合
もし手元に無い場合はScoopを使ってVimをインストールするのがおすすめです。ScoopはScoopの公式サイトの手順でインストールできます。
Scoopをインストールしたら、次のコマンドを実行してvimとgitをインストールします(vim: Vim本体、git: バージョン管理システム)。
scoop install vim
scoop install git
インストール
次のコマンドでvim-duzzleをクローンします。
git clone https://github.com/deris/vim-duzzle %HOMEPATH%\vimfiles\pack\pack\start\vim-duzzle
あとは次のコマンドでVimを起動して:DuzzleStart
というコマンドを実行すると開始できます。
vim
Mac
環境が手元に無く試せていませんが、恐らくLinuxのほうの手順でできると思います。
Linux
VimとGitをインストールしたのち、次のコマンドでvim-duzzleをクローンします。
git clone https://github.com/deris/vim-duzzle ~/.vim/pack/pack/start/vim-duzzle
あとは次のコマンドでVimを起動して:DuzzleStart
というコマンドを実行すると開始できます。
vim
今回用に作ったRTA用のあれこれ
今回RTA用にスクリプトを作成しています。使い方は簡単で、git cloneで落としたら、後はディレクトリに入って./startvim
(Windowsのcmdであればstartvim
)とするだけです。そうすると、vim-duzzleのインストール、vimrcの読み込みを無効化した上での起動をやってくれます。動作には次のものが必要です。また、それぞれにPATHが通っている必要があります。
- vim
- git
また、Windows限定ですがLiveSplitと連携できるようにしていて、レイアウトファイル、スプリットファイル、タイマー制御ロジックを用意しています。レイアウトファイル、スプリットファイルはそれぞれ次の場所に配置しており、LiveSplitで読み込むだけで利用できます。
- share/livesplit/vim-duzzle-layout.lsl
- share/livesplit/vim-duzzle-split.lss
タイマー制御ロジックを利用する場合は次のファイルの編集と、次のものが必要です。
-
conf/config.json
- livesplit_enableをtrueに
- livesplit_addressをLiveSplitのアドレスに(WSL2を使っている等の場合に編集が必要です)
それぞれ、LiveSplit Development Buildはリンク先のDOWNLOADSのLiveSplit Development Buildから入手、展開して任意の場所に配置(zipファイルは直下がディレクトリでないので展開時は注意)、LiveSplit.Serverはリンク先のreleasesのLiveSplit.Server.zipから入手、展開してLiveSplitのディレクトリのComponentの配下にファイルを配置すると導入できます。LiveSplit.Serverを有効にするには、Edit layoutにLiveSplit Serverを追加して、ControlからStart Serverとする必要があります。用意したレイアウトファイルには最初からLiveSplit Serverを追加しているので、レイアウトファイルを読み込んでさえいればStart Serverをするだけで大丈夫です。このStart ServerはLiveSplitの起動のたびに必要です。これらのセットアップがされていれば、開始でstarttimer、中断でpause、終了でsplitをしてくれます。
その他、vimの起動オプションに-Wを指定しており、操作ログをlog/vim.logに残すようにしてあります。
今回撮った動画の撮り方
今回は特に凝ったことしてないですが一応…。今回は、ターミナルを全画面表示にして、LiveSplit、KeyCastOWを立ち上げ、OBS Studioの画面キャプチャで録画、AviUtlでBGMを追加するぐらいしかしていないです。
- wsltty (ターミナル(フォント: Cica、テーマ: Nord))
- LiveSplit (タイマー)
- KeyCastOW (入力キー表示)
- OBS Studio (録画)
- AviUtl (動画編集)
LiveSplit、KeyCastOW、AviUtlだけ入れ方が少し複雑かもしれません。LiveSplitは前述した通りの手順で大丈夫ですが、KeyCastOWはMSBuildでのビルドが必要です。手順は次の記事等が参考になります(VisualStudioは最新版で大丈夫です)。VisualStudioを"C++によるデスクトップ開発"にチェックを入れてインストールしたら、VisualStudioでソリューションとして開いて、プロジェクトの再ターゲットをやって、後はソリューションのビルドをする感じです。
AviUtlは本体に加えて、拡張編集プラグイン、入力プラグイン、出力プラグインを入れる必要があります。手順は次のページ等が参考になります。
動画を撮る構成は何でも大丈夫だと思います。
まとめ
完走した感想…走ってみるとステージ構成がよくできていて遊びがいがありますね。最初はRoom27が気に入ってましたが、他のステージも遊んでる内にいいなと思うようになりました。あとは純粋にVimの練習をするのであれば、正攻法で全部行くのが一番いいと思います。今回は走っていないですが、monaqaさんのフォーク版のvim-duzzleも試したいところ…
また、今回RTA用にあれこれ用意したりしましたが、遊ぶ分にはvim-duzzle以外は何も入れなくて大丈夫です。もし気になったら是非遊んでみてください!
Discussion