ノロワレハウス私家版DQ2α版完成
大前提として、本記事で以下に書いた内容はあくまで趣味の範囲にとどまるものであることを明言しておきます。原作があって、そのアレンジを楽しんだ記録であって、それ以外のナニモノでもありません。もちろん本件について権利なんか主張しませんしできるものでもありません。
(※タイトルを「初版」から「α版」に変更 @ 2021/1/24)
きっかけはなんてことないというか、リモートワークで絶望的に汚いコードを延々触ってるうちに荒んできて、なんとなく棚を掘り返してたら、結局また何も完成させずになんとなく放置することになってしまっていたRPGツクールVXが出てきたことです。VXですよ、いま。処理系は Ruby 1.8.1 らしいです。いま Ruby いくつでしたっけ、もう 3.x ? まぁとにかく、何も残らない(かもしれない)気晴らしのためだけに新たにン万も払う気にもなれないし、せっかくあるからこれで遊ぼう、と。
ただ、いつもの問題が発生します。これで何を作るんだ?と。設定とかお話とか考えてるうちに飽きるだろ?と。でも今回はひとつ思いついたんです。
いちから考えるのがダメなら何か再現してみよう
それで、作業量がほどほどで、かつそれなりの複雑さもあるような再現対象ってどういうのがあるかなとひと思案した結果、DQ2でいこうとなったのでした。プレイする側としてはFC版からSFC版、スマホ版もやってるしまさに「勝手知ったる」なんですが、いざ作るとなるとどうか。まぁなんにせよ、気分転換のネタになれば十分だしそれでよい、というつもりで始めました。
どういう作業があるの?
設定とかストーリーとかが全部ばっちり決まってて、必要になる画像素材とか音源とかが全部そろっているのだとして、その後はどういう作業があるのか、思い出しながらレポートしてみようと思います。
>データベースちまちまつくる
DQ2だったら、ローレシアがいてサマルトリアがいてムーンブルクがいるじゃないですか。こいつらはたとえば経験値いくつでレベルいくつになるのか、レベルいくつになったら力はいくつになるのか、そもそも力とか素早さとかどういうのがあるのか、レベルいくつで呪文は何を覚えるのか、誰がどの武器防具を装備できるのか……そういうのをつくります。だいたいは攻略サイトとかに書いてあるのをVXの所定の入力欄に転記すればOKなんですが、経験値とレベルの関係とかパラメータだけはVXでは完全再現が難しかったのでだいたいになってます。
その他、敵、スキル、道具、ステート、属性、用語の定義etc、そういうのをちまちまつくります。もう無心で。VXがもともともってるものがいけそうなのはそのまま使いました。顔画像とかキャラの外観とか。
>音源の調整
今回は手元にあったFC版音源を使ったわけですが、BGM 用音源だと wav とか mp3 とかではダメです。ループしないので。なので、わたしの場合は Audacity でループ開始と終了をサンプル単位で指定してそれを ogg で書き出しました。それをVX側にインポートして使うわけです。まぁこれも手順がわかってからは無心です。
>マップ
DQ2だとたとえばワールドマップは 256 x 256 = 65536 マスあります。これ今回は原作のマップと見比べながらひとつひとつ手打ちしました。無心で。ほかにも町とかダンジョンとかいろいろあるので、マップの数は結局100枚超えました。なにかツールあるんですかねぇ。既存のマップをスキャンしてデータ置換してどばーっと流しこむようなやつ。
--
このあたりまでが下準備かなーという感じで、ここから先が本番というか、より「げーむかいはつ」っぽくなっていきます。
>イベント
たとえば宝箱ならこの宝箱を開けたら中身が何で、どういうメッセージが出てというのを設定したいじゃないですか。どのキャラに話しかけたら何て言うのかとか、その内容は状況によって変わったりするのかとか、そういうのを全部のマップに書き込んでいきます。今回は知ってるものの再現なので、参照元と比べながらストーリーの進行に沿って埋めていく感じでした。
なんかこのあたりまででけっこうげーむになりそうじゃないですか。確かにげーむとしては最低限動きそうではあります。でもこれだけだとDQ2の再現には程遠くて、さらにここから作業が本格化します。
>コーディング
VXでもともと搭載してる仕組みだけだと足りないものがどうしても出てきます。代表的なのは「ルーラ」です。最近の用語でいうと「ファストトラベル」にあたるんでしょうか。特定の始点から特定の終点に移動するようなもの(ex. 旅の扉)だけならVXのもともとの仕組みだけでできますが、スキルとして発動して任意の始点から終点を選択して移動するというしくみはVXにはないので自分でつくる必要がありました。
ルーラやキメラのつばさでのファストトラベルは、一度でも自分で行ったことのある特定の町や城等が対象になるので、それぞれに行ったことがあるかどうかはデータとしてどこかに保持しておく必要があります。他にプレイヤーの行先のXY座標と、船を持っていた場合の船の移動先のXY座標や行先選択時に表示させる1行説明文もどこかに保持しておく必要があります。行先の選択をさせるウィンドウもないのでこれもアイテムウィンドウの仕組みを流用してつくる必要があります。そういうのをつくって、道具みたいに選んで行先を決めて決定ボタンを押すとMPを消費して移動、という一連の流れを、Ruby のコードとVX側の仕組みをうまく組み合わせて実装しました。船の上でルーラを使うと船に乗ったまま陸上に着地してしまったり、BGMが海のままになったりそれはもういろいろバグりましたw
他にも、「VXでは乗り物に乗っているとエンカしないので船に乗ってる間もエンカが発生するようにする」とか「VXに用意されているショップコンポーネントだと教会のやりとりができないからつくる」とかもそうです。
あるいは、VXにもとからあるしくみだけでできると思ったけどそのまではダメなのでやっはりコードで修正が必要、というパターンもありました。
わかりやすいのは
メタスラとかはぐれメタルに呪文が効いちゃダメ
という課題です。バギが効いちゃダメだし、ザラキで死なれても困ります。属性とか耐性のチューニングだけでいけると思ったんですが案外これが無理で。0%とか100%ができないんですよねVXのもとの仕組みだけだと。あるいは、ハーゴンやシドーにメガンテが通っちゃダメというのもそうです。そうこうするうちに、ステート変化を発生させるようなスキルの場合属性による補正は効かないことが発覚したりもしました。まさにきょうになってさらにステート変化有効性というパラメータもこのあたりの制御に関わっていることがわかったりして、いやーなかなか奥が深いです。属性関係なくこっちでやればよかったのかな。でもこれも0/100はできなそうだったし……。
※修正追記(2020/12/28)
あらためてコードをまじめに読んだらステート変化の必中と完全無効はできそうです。ただそれと属性相性をからめる仕組みはやはりもともとのVXにはなかったのでそこはつくる必要があります。
……とまぁ、いろいろ試してるといろいろ課題が出てきて、都度それに対処するための修正を入れるという形で進んでいったので結果として出来上がったコードは結局あまりきれいではないです。どういうことをやったのかまず整理しないときれいにはできないでしょうねこれ。いずれやってみたいとは思っています。
でもほんと楽しかった
ということで、記憶にある限りだと確かRPGツクールは2003も買ってて結局何も完成せず、VXをさらに買うもやはり何も完成していなかったので、この歳になってようやく一作完成と言っていいところまで来たなと。今回はもともとある作品の再現ということで完成像はイメージしやすいし、迷子になることはあまりなかったです。これが、設定やストーリーを一からつくるとなるとわたしにはなかなかそんなに才能もなさそうで無理だろうなと思うし、以前ツクールを買ったときはまさにそれを目指そうとしてしまってたんだなというのが、今回のこれをやってみてよくわかりました。とはいえ、一度何かできてしまえばそれのアレンジはなんとかできそうという感触も得ているので、コードの整理が済んだらこれに勝手に後日談でも追加してみようかと思っています。
何かゲーム化したいアイデアがある人を手伝うというのも面白いかもしれないですね。ツクールで、ではあるにせよ。Unity? んーまぁ余裕があればw
もしプレイしてみたいという奇特なかたがいたら
冒頭にも書きました通りで、広く公開できるタイプの趣味ではないのでそれはできませんが、個別にファイルをお渡しするくらいなら怒られないかなと思ってます。@cursed_steven までDMでもください。
64 MB くらいなのでまぁファイルアップローダでも使えばやりとりできるんじゃないでしょうか。DropBoxだと消すの忘れそうだしやめといたほうがいいかな。Windows 8.1 で開発してたので Windows 8.1 なら動くと思います。まぁそれより古い Windows じゃなければ動くんじゃないですかね? Windows 10 で動作検証してくれる方がいたらありがたいです。
以上!