戻る

FFの飛空挺プログラミング

2012/09/02
Adobe Flash Player を取得
十字キーで移動、Zかマウスクリックでゲームのタイプ切り替え


FF4の視点

FF5の視点

FF6の視点
これが作りたかったんです!これ!
3Dの世界を立体的に見せるのは3Dライブラリの機能をそのまま使えば出来ますが、2Dの世界を立体的に見せるにはどうやったらいいのか試行錯誤。
検索エンジンで検索しても参考となる記事が全然ヒットしないんです。

そこで昔に知人のアドバイスによりピクセル操作すれば出来るという情報を仕入れました。
当時はピクセル操作の事が分からず断念。しかし時は過ぎプログラミングの腕を上げ、理解できるようになってきました。
それでピクセル操作を実践し、出来たのがFF4の飛空挺視点の画面。Javaで作りました。


ピクセル操作により夜のような色にする事も出来ました。


これらは2008年の頃です。

当時はここで満足して終わっていたのですが、まだピクセル操作は完全ではありませんでした。
マリオカートやF-zeroのようなくるくる回る画面、FF6の飛空挺の画面がまだ出来てなかったのです。

そして時は流れて2012年9月(今記事を書いている時です)。
Flashでいろいろ作品を作っていたところ、ふとマリオカートみたいな画面を作ってみたいと思いました、
Flashでもピクセル操作が出来るみたいです。
Flashの描画速度をBitmapDataクラスを使って上げる方法(外部リンク)

ただしActionScript2以上じゃないと出来ないみたいなんでFlashCS6の体験版をインストール。
そしてどうにかこうにかピクセル操作を覚えてFF4の視点には辿り着きました。
しかしここからが問題。くるくる回すにはどうするか。

画像処理のホームページを発見。
DIB/Waveとグラフィック・音声処理実験室(外部リンク)
ありがたや!ここがなければ自分一人では出来なかったかもしれません。

ここの「ビットマップの単純な拡大・縮小」と「ビットマップの回転処理」という記事が参考になりました。
拡大縮小は自分で考えて出来ていたのですが回転は自分では分からなかったです。数学覚えてれば得だと分かりました。
いや、数学は覚えてなくても資料や公式を見て使う事が出来ればいいんです。

それで回転を使って画面を回転させる事には成功しました。
しかし回転した後の変形をどうしたらいいか分からない。
順番に作っていこうと考えて、まず回転した配列を作り、その配列をさらに拡大縮小と処理したら出来たのですが、処理負荷がとんでもなくかかりました。(回転させた配列がとんでもなく大きいサイズのため)

一発で回転→拡大縮小とする必要がありました。
画面サイズが256x224とすれば、256x224を一回走査して完成するように。

ノートでいろいろ図を書いていろんな式を作ってはバグり、2~3日が過ぎました。
そこでまずはFF4の視点に戻そうと思って戻したら、ちゃんと出来てなかったんです。
左側が揃っていて右側に行けばずれるようになってました。

間違った変形

あれ、どうしたらいいのだろうと思って2008年のプログラムを見て、なるほどと思い修正しました。
過去の自分のほうが腕が上だったみたいです。

正しい変形

そして、その修正した部分を回転のところでも使ってみたらどうだろうと思い、いざ使ってみると…


ついに出来ました!
この時は自分に拍手をしました!
久しぶりにプログラミングで喜びました。


さて、このソースコードを公開するか否か迷いましたが、数日考えて出来た財産なんで公開はやめておきます。
でも必要な技術は、この記事に書いてる事だけです。

また、処理を早くするために固定小数と三角関数テーブルを使用しました。
予想ですが、スーファミでは回転とかする機能が提供されてて高速に動作するのだと思います。
FFのROMの解析が出来れば一番なんですけど

おわり

何か連絡あればこちらまで