RPG製作~広大なワールドマップ入力大変→画像からデータ変換するツール

勘違いしながらどハマりしながら作り上げる爺の『JavaScript奮闘記』。爺のくせにゲームのプログラミングに興味を持ってしまいました。

ポク太郎です。

ドラクエ型の自作RPGを製作中です。同時に、RPG本体のプログラムと表裏一体となるマップエディタ製作にも奮闘中。

そこで、広大なワールドマップの入力を簡単にするツールを作成しました。画像編集ソフトで画像を描きソレを食わせて変換することによりマップエディタ用の元データを作り出します。


広大なワールドマップは入力自体が大変

ドラクエのワールドマップの大きさ

参考とするドラクエのワールドマップの大きさは、

ドラクエ1…100x100タイル
ドラクエ2…256x256タイル
ドラクエ3…256x256タイル
ドラクエ4…256x256タイル
ドラクエ5…256x256タイル(←推定)
ドラクエ6…256x256タイル(←推定)夢・現実・海底で3つ分

256x256タイル以上の大きさはプレイヤの負担が大きいってことで止めてるらしい。7も基本は256x256タイルに見えます。

問題はバランスよく大陸を配置できない

難しいのはマップエディタ上の小画面でソレを入力すること。バランスよく大陸・海を配置できません。

そこで、全体の画像を描いてソレをマップエディタ用のデータに変換することを考えました。

広大なワールドマップ入力補助ツール

入力補助ツールの使い方

サンプルとして作ったのがこの画像。画像編集ソフトお絵かきします。Windows標準のペイントでもいいし、ゲーム作る方ならPhotoshop使うでしょうし。

描いた後変倍すればOKですが1ピクセル=1タイルとして読み込みます。描いたマップを白と黒(白:海、陸:黒)で二値化して下さい。

二値化方法…Windows標準のペイントなら、一旦「モノクロbmp」で保存した後それをpng形式で保存。Photoshop使う人なら分かるでしょうから省略。
自作RPG向けワールドマップ入力補助
256x256ドット

画像が出来上がったら、下のボタンを押してその画像を指定すると、変換されたテキストファイルの保存ダイアログが表示されます→ダウンロードして下さい。


出力されたテキストデータはポク太郎製のマップエディタ向けなので、ご自身が使うマップエディタ向けに編集して使って下さい。ポク太郎のマップエディタでは海が0番、陸が3番です。

ここでのマップエディタのフォーマット

出力されるデータのフォーマットはこう。

0,255,0,255,map No:,水平:256タイル、垂直:256タイル
mapd[0]='0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__';
mapd[1]='0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__,0__';
…

1行目は[開始x座標],[最終x座標],[開始y座標],[最終y座標],[マップNoメモ用],[マップのタイル数表記]。

2行目以降は1行づつmapd[y座標]=’………(水平1列のデータ)………’が順番に連なります。

内部はカンマ,区切りでタイルデータが並びます。タイル一つがアンダーバー_区切りで「背景番号_地形・キャラ番号_イベント番号」と出力。それが横幅分続きます。

このツールは画像から陸と海だけ読み出すものなので、背景番号以外は空白で出力されます。

JavaScriptはセキュリティ絡みで“データファイル”なるものが扱いにくいので、即JavaScriptのソースとして移せるよう配列に入力する形で表示してあります。

JavaScriptのソースとしてデータを記述すればセキュリティ問題で読み込めない事態は起きないので。データ大きすぎると遅くなったりするのかな?←トラブルが起きたら再検討します。

赤とか青とか使って森・山岳を入力してしまうことも考えましたが、行動制限のための迷路構造はマップエディタ上の方が編集しやすいはずなので、海と陸の入力だけに留めました。

あくまでこれは入力補助を目的としたもの。マップエディタへ作業を移した後、マップエディタ上で細かい部分を修正してく構想のお助けツールです。

コメント

タイトルとURLをコピーしました