読者です 読者をやめる 読者になる 読者になる

ごちゃログぴこっ

はなまるデジタル創作紀行(DTM、TAS、いろいろな技術)

Luaスクリプトによる半自動マップ画像作成 - 魔導物語 はなまる大幼稚園児

ゲーム 技術 技術-プログラミング 技術-プログラミング-Lua

Luaスクリプトは発想次第でさまざまな可能性を開ける」先人のスクリプトの数々をみてそう思いました。そこで「わたしもなにかみんながびっくりするような案を出して、なでなでされたい!」という一心で勢いよく書いたのが今回のスクリプトです。

実際のソースコードSNESMadou_SemiAutoMap.lua をご覧ください。

解説

ゲームのマップをスクリーンショットから構築していく作業は多くの苦労を伴います。適切な位置にキャラクターを移動させてスクリーンショットを撮ったら、位置を間違えないように注意しつつ、大きな画像の上にそれをぺたぺたと貼っていく。これがもっとも基本的な作業なのですが、これだけの作業でも結構な気力が必要になります。現実にマップを作成する場合、ほかにもスプライトのアニメーションや敵の移動を封じたり、レイヤーの表示を切り替えてキャプチャしたのち、必要な部分を選んでつなぎあわせるなど、ほかの作業もいろいろと必要になってくるので、とってもとってもたいへんです。

そこでスクリプトの出番です。基本作業の一部をスクリプトに自動処理させることで、マップ制作の手間は幾分軽減されます。


  1. 画像のアニメーションをある程度抑制する(メモリ書き込み操作)
  2. キャプチャ対象の位置までアルルを移動させる
  3. いったんポーズ画面に切り替えることで画面表示を更新する
  4. アルルを彼方へと飛ばしたのちキャプチャ、メモリに保持する巨大画像の上に貼り付け
  5. すべての箇所がそろうまでキャプチャを繰り返す
  6. 完成した画像をPNG形式などで保存する

処理される工程をリアルタイムで眺めると遅いですが、実際にエミュレータで動かす場合は動作を早回しすることができるので、負荷がかかっていなければ実際の時間はかなり短くなります。1000px四方ほどもあるマップを手でキャプチャしようと思うと30秒では不可能ですが、スクリプトならそれが可能になります。あくまで半自動なのでうまくいかない場合もありますが、そのような場合は失敗した箇所だけ手動でキャプチャすればよいようになっています。

おまけとして、部屋の移動がスムーズにおこなえるよう、ドラッグアンドドロップによる移動機能をつけました。

魔導の塔に入れるよ! やったねアルルちゃん!