【 Making「ASALT」その4 】 |
---|
Home | PC-6001mkII | Program | etc |
このページでは、次Verの実装過程を書いています。 |
2009/08/某日:グレネード案 |
mkII版の動画も公開して一段落がついた。(作る予定だった初代機版はまだなのだが) 回転と拡大縮小については、ほぼ最初に思い描いたとおりになったが、やはりグレネードが実現できていなかったのが多少の心残りだ。 とはいえ、回転/拡大縮小した画面にうまく合うようにグレネードの爆風の位置や大きさを計算するのはかなり骨が折れる。もしできたとしても極端に遅くなるかも知れない。こうして、なんとなくお蔵入りになろうとしていた。 ある日ふと思った。こうすればいいのではないだろうか? 地形のデータに直接グレネードの爆風を書き込めば、グレネード用に回転/拡大縮小を考える必要がなくなるので、その分楽にできるのではないか? 爆風の解像度がかなり荒くなる点は気になるところだが、試す価値はありそうだ。 |
2009/08/某日:処理方式検討 |
グレネードの大まかな処理について考える。 まず、グレネードの飛距離調整+発射をスペースキーで行う。スペースキーを押しっぱなしで飛距離調整(前方向のみ)、飛距離調整中にスペースキーを離せばグレネード発射にする。左右のカーソルキーを両方押す方が本物に近いのかも知れないが、そこは余裕ができてから考えよう。 グレネードの状態を以下のように大まかに決める。
おそらく作り始めると必要なものが増えるとは思うが、まずはこの辺りで作り始めてみよう。でもグレネードを実現するんだったら敵も欲しいな...。妄想は広がっていく。 |
2009/09/05:初代機版作成 | ||||||||||||||||||||||||||||||||
ここまで書いておいてなんだが、現状のmkII版をベースに初代機版を作成することにする。グレネードや敵表示が初代機のメモリに納まるのかを確かめたいからだ。 mkII版から初代機版への移植は前回「回転」も行っているが、今回はもう少しだけ高度にする。前回は4色+黒表示だったのを8色+黒表示に拡張しよう。 ここで初代機版セミグラフィックのデータ構造について少し説明する。 1キャラクタ辺り、ドット色8色(黒は背景色固定なので除外)で3ビット、ドットデータが2×3ドットで6ビットで、最低9ビットの情報が必要となる。このため、1キャラクタ分を描くのに2バイト必要になる。 この9ビット分の情報をアトリビュート部分とデータ部分の緑部分に記述するのだが、ここは本題ではないのでさらっと流しておく。ちなみに、4色の場合はデータ部の1バイトのみ変更すれば良いのでその分処理が楽になる。
1キャラクタが2バイトになるということは...1キャラクタを1バイトで表現していたmkII版の面データを倍にする必要がある。とはいえ、単純に倍にするとデータだけで32KBになってしまい、プログラムが1バイトも入らなくなる。 幸い、今回の場合は右側の空白部分が大きいので、横幅を半分(256キャラクタ→128キャラクタ)にして対応する。まあこれでもデータだけで16KBと、使用可能なメモリの半分を使ってしまうのだが。 という事で、mkII版の面データを初代機版の面データに変更するプログラムをHSPで作成し、データ変換を行う。 マシン語部分は、表示部分は全面的に見直しを行ったが、移動処理や音の処理についてはmkII版のものをそのまま流用する。ちょこちょこと修正や微調整をして、最後にBASICプログラムの後ろにつなげる。 出来上がったテープイメージを読み込ませて実行。ちゃんと動いた! ただ、プログラムを動かすと空きメモリが約3KBになってしまう。これからエンハンスする分は果たしてメモリ内に収まるのだろうか? |
2009/09/06:風呂敷広げ |
実現できるかどうかはわからないけど、ついでなので敵の移動についても考えてみよう。 まず敵の表現方法だが、実行速度をなるべく落とさず、かつ手間がなるべく少ない方式を模索する。となれば、やはりこれしか考え付かない。グレネードと同様に個々の敵も地形の一部にするのだ。 現状のマップから、敵とおぼしき数を数えてみる...ざっと50個強。止まっているものと数に数えずに多少目減りさせたとしても、40くらいは欲しいところか。 そう思ってはみたものの、40キャラクタを同時に動かすとかなり遅くなる事は目に見えている。 どうするか。とりあえず一つの案としてあるのが時分割だ。幸い、本家ASSAULTでも敵の動きは遅いので、例えば4回に1回だけ動かすようにすれば、同時に移動する敵キャラは10個で済むので結構マシになるのではないだろうか。 できるようなできないような、微妙な具合だ。 |
2009/09/07:敵データ Ver.1 | ||||||||||||||||||||||||||
敵出現の考えが出たところで、敵の制御用データの形式を考えることにする。 大まかに何が必要かと列挙すると、以下のようになる。
その代わり、敵の種類と状態は1バイトにまとめることにする。どちらも処理の分岐で使用するものなので、2つに分かれているより1つにまとまっていたほうがいいだろう...多分。 種類/状態の値を決めるにあたり、必要な情報を整理する。まず敵の種類だが、とりあえず簡単に時期に向かって移動するタイプ(移動)と移動しないタイプ(固定)の2つにする。一応、それぞれ2種類の色違いという事にして4種類にしようか。 敵の状態だが、本家ASSAULTを参考に以下のようにしてみる。
これらの情報を元に、以下のように値を割り振ってみる。
荒削りではあるが、これで最低限の処理は書けると思う。これで少し処理を書いてみるか。 |
2009/09/1x:頓挫 |
これまで考えた情報を元に、グレネードと敵移動の処理を行うマシン語を個々に作成する。 一応mkIIの他に初代機でも動作させる事を念頭に置いてはいるが、初代機ではメモリ内に収まるか否か微妙な状況だ。多分どこか空き領域を確保する羽目になるのだろう。 と、ここで問題が発生する。どうも今の仕様だと、頭で思い浮かべても面白くないのだ。具体的にどこが面白くなさそうなのかはよくわからないが、このまま進めるのにためらいがある。 さて、どうしたものか...。 |
2009/12/30:再開 |
頓挫したまま、あれよあれよという間に時が過ぎてしまった...。 しかし、ここで、再開のきっかけになる小さな出来事があった。ニコ動の「攻撃は?」というコメントだ。そうだよねやっぱり欲しいよね。ただ、このまま進めても余り面白くなる気がしないという所は変わらない。とすれば次に取るべき手段、それは手戻りだ。 おそらく面白くなりそうにない理由は、敵が単調すぎることだろう。あまり複雑な動作はできないにせよ、動き方や移動速度をある程度変更可能にするだけでも、もう少し良くなる気がする。 かくして、年の瀬に帰郷の新幹線の中でイメージを作り上げていく。とりあえず名前はこれ以外にないだろう。「ASALT PLUS」。 |
2010/01/04:敵データ Ver.2 | ||||||||||||||||||||||||||||
帰省帰りの新幹線で、敵データについて考える。 前のVer.1レベルのマシン語も机上で途中まで考えていたが、ここでソースを晒してまた作り直す事にする。 前回考えたものより強化したいのは、柔軟性だ。例えば以下のような事ができるようにしたい。
あとは、肝心の敵種類だが、今の所アイディアを列挙するに留める。処理速度の限界もあるし、最終的にどこまで実現できるかは未知数だ。
|
← その3 | Making「ASALT」 | その5 → |