ActBarrier 製作過程 その1

Home PC-6001mkII Program etc

 このページでは、ActBarrierの骨格部分作成の過程を書いています。

ActBarrier 製作過程 Top


2012/10/0x:きっかけ
 「継走迷路」を無事出し終わって一週間ほど経った頃だっただろうか。

 いつものようにHSPプログラムコンテストのページを眺めるが、どうもHSPTV部門の作品が増えない。締め切り間際にはもっと増えるんだろうけど、この時点では正直心許なかった。

 ...もう一つ出してみるか?

 ゲームのネタも、「継走迷路」の作成中からおぼろげながらあった。それはオプションで敵をやっつけるシューティングもどき。
 基本的なアイディアとしてはありふれている気もするが、作り方によってはオリジナリティが出るのではなかろうか?

 とりあえずのイメージとしてはこんな感じ。
  1. 自機は攻撃できない。
  2. グラディウスのようなオプションで敵にダメージを与える。
  3. オプションは敵弾も防ぐ
  4. ダメージを与えたオプションは段々パワーが落ちてくる。
  5. オプションのパワーは自機が回復させる。
  6. 時々、ボス級の敵を出す。
  7. 敵を撃破する毎に難しくなってくる。
  8. 自機から一番遠いオプションでしか倒せない敵を出す。
 まあ、最終的には色々変更があったわけだが。

2012/10/06〜08:オプション
 なにはともあれ、オプションだ。という事で、オプションから作り始める。

 今回は、極力シンプルな絵で行きたいので、文字に色を付ける程度のキャラクタにする。自機は「△」、オプションは「○」で良いかな?

 グラディウス風オプションの実装は、さほど難しくはない。自機を動かした時に、移動情報を配列変数に記録させておいて、各オプションは少し前の移動情報を元に移動させる。ただ、無限に配列に取るのも無駄なので、今回は配列変数を256個分とって循環させるようにする。

 もう一つ、スペースを押した時に、自機に向かって一直線に集合させる動きも実装する。
 通常移動か集合中かをあらわすモードを変数として用意し、モードによって移動処理を変えるようにする。集合モードが終わったときは、それまでの移動情報は無駄な情報となるので一旦クリアする。

 さらにもう一つ、オプションの回復も実装する。オプションと自機の距離が一定以下の場合に、オプションのパワーを増やす。その他、オプション用のキャラクタ(色違い)をあらかじめ5種類用意し、オプションのパワーによって表示するキャラクタを変える。

画像

 後で調整が入るだろうが、まずはこんなところか。

2012/10/11:敵キャラ
 今年、2作目を作成した理由をもう一つ思い出した。「継走迷路」への反応が今ひとつ薄かったからだ。あれはあれで結構作りこんだんだけどな...。とつぶやいて、続きに移る。

 敵キャラはどうしよう。「Bubbrisk」のようにキャラクタの組み合わせで作るかな、と思っていたのだが、ふとgrotateの命令が目に留まった。

 grotateで文字を高速回転させてみるか。試してみると、残像により全く別物のキャラクタに見える。

画像

 面白そうだしこれで行こう。と一旦は思ったが、ハタと気づいた。画面のハードコピーをとると当然文字は回ってないので、かなり印象が変わってしまいそうだ。

 うーむ。ならば、回転速度を落とすか。敵の体力が減る毎に回転が落ちていき、回転する力がなくなると撃破、みたいな感じで作成してみる。

画像

 これはこれで味があるかな。

2012/10/20:★
 やっぱり、敵を撃破したときの表示がないと寂しいかな?という事で、敵にダメージを与えた時に敵の中央から★をランダムで散らすようにする。

 ...やっぱり、こういうエフェクトがある方が良いな。ついでに、ダメージを与えたオプションのパワーが高いほど遠くまで飛び散るようにするか。
 ...おお、こちらの方が断然良い!実は敵を撃破したときには特に何もしていないのだが、不思議と敵を撃破した事が視覚的にわかる。

 撃破が気持ち良いので、敵の動きもシンプルにして、積極的に撃破するようにした方が良いんじゃないだろうか?この時点で、ゲームの方向性が決まった。

2012/10/20〜21:上下左右
 敵キャラの文字を考える。

 どうやら丸付き文字と相性が良さそうなので、その辺りで良い文字がないかな、とIMEの漢字一覧を眺める。するとあった。「上下左右」の丸付き文字が。
 文字通り「上下左右」の敵キャラを「上下左右」に動かす。わかりやすいし良いんじゃないか、これは。

 次に、ゲームに制限時間を設ける。60秒だと少し足りないし、切りの良いところで100秒にするか。という事で、ゲームの残り時間を画面中央に表示させる。

 これに伴い、出現する敵の種類も段階的に増やすことにする。順序は、はじめに上からの敵、次に右からの敵、次に左からの敵、最後に下からの敵というのが自然かな?という事で開始から15秒おきに「下」「左」「右」「下」の順に敵の種類を増やしていき、さらに経過時間によって敵の出現数をじわじわと増やしていく。

 その他、点数表示も追加する。ちなみに、この時点ではダメージ点(1/60秒毎に加算)をオプションパワー(1〜4)の2乗、撃破点を1000点としている。

画像

 枝葉部分はできていないところも多いけれど、メイン処理の骨格部分はこれでほぼ完成かな。

2012/10/21:100秒後
 無事100秒を持ちこたえた時の処理を考える。

 やっぱり、危機を脱したような感じにしたほうが良いだろう。表示中の敵が全滅するというのはどうかな?という事で実装してみる。

 0〜99の敵番号(実際に使用している敵番号は39までだが)について、1フレームあたり1つずつ生きているかどうかを確認し、生きていれば最大8個の★を散らして爆破させる。これで、多少の時間差を持って全滅してくれるはずだ。

 動きを確かめるために、残り時間を短くしてプレイ。

画像

 うん、終わったという気持ちになって良いんじゃないだろうか。

2012/10/22〜27:スコア送信
 ゲームの幹部分が一通り出来上がったところで、枝葉部分に移る。順序的にスコア送信とランキング画面かな?

 HSPTV経由のスコア送信は、前に「Bubbrisk」でも行っていたので、まずはその処理を流用する。...とりあえず最低限の部分はできた。ランキング画面の見た目はまたあとで考えよう。

 次に、これまでスコア登録時に問題となっていた以下の部分を対策することにする。
  1. 同じ人が連続でスコア登録してしまう
  2. 初回スコア登録時のダイアログでキャンセルすると、ランキング表示で全て0点表示となる
 まず一つ目。本当は、同じユーザがランキングを更新したときに古いスコアを消したいのだが、あいにくHSPTVのスコア登録ではプログラムからランキングを消去する手段がない。

 ならば、せめて前回登録したスコアより低いスコアの場合はスコア登録できないようにするか。という事で、ゲームをスタートしてからの自己ハイスコアがランキング内で、かつ未登録の場合だけ、スコア登録のボタンを出すようにする。

 次に2番目。そもそも、初回スコア登録時のダイアログでキャンセルボタンを押すとなぜランキングがまともに出ないかというと、キャンセルした場合はHSPTVのサーバ側にあるランキング情報が変数に入らないからだ。

 という事で、スコア登録時にはランキング用の変数を一旦クリアしてからスコア登録を行う。スコア登録処理後に、ランキング用の変数の値が空のままならスコア登録前にキャンセルしたとみなし、ランキング情報表示直前にHSPTVのサーバ側に最新のランキング情報を読みに行くようにする。

 ローカルの環境で何度か動作を確認する。よし、これで大丈夫だろう。

2012/10/xx〜27:タイトル
 さて、タイトルだ。ここは毎回悩む。

 ゲーム内容にある程度沿った名前で、かつWeb検索でほとんど引っかからない語句にする。ネーミングの基準は以上なのだが、特に後者の条件が厳しい。

 100秒で終わるゲームだから「100sec」を強調するか?いや、自機を守るから「Guard」を入れるか?いや、どちらかと言うと攻撃的だから「Active」とか「Agressive」を入れるか?オプション3つだから「Tri〜」にするか?うーむ...。

 名前を考えている過程でふと思い出したのが、いつかアニメでみた「ピンポイントバリア」だった。バリア、「Barrier」か。オプションのやっている事はバリアに近いんだよな。
 バリアをアクティブに動かすという事で、「ActiveBarrier」...ちょっと長いな。じゃあ、もう少し縮めて「ActBarrier」にするか。語感もそこそこ良いし、これでいこう。

 こうして、延べ約2週間におよぶ悩みが決着した。

2012/10/27:仕上げ
 いよいよ仕上げだ。MIDIの機能を使用して、ピストルの音を中心に敵のかすり音,撃破音、およびやられ音をいれていく。

 ...例年どおり、start.axの制限6000バイトを超えたか。まあここは予定通りだ。という事で、プログラム容量の削減にいそしむ。今回はプログラムにまだ削減の余地が多くあったし、妙にやる気もあったので、一気に5997バイトまで削減した。

 これで一通り作り終わった。という事で、何度か通しでテストプレイを行う。
 ...どうも終盤になると敵が多くなるからか消極的なプレイになるな。よし、得点に倍率をつけよう。現状約15秒おきに敵の種類が増えるので、このタイミングで得点の倍率アップをするか。

 ゲーム開始時が1倍で、最後の10秒では7倍となる。これで、スコア狙いの場合は最後まで気を抜かず攻撃せざるを得ないだろう。

 倍率の処理を追加し、少々プログラムの削減に苦しんで、ようやく完成!

 HSPプログラムコンテストの次の更新時間にギリギリ間に合わないかと心配しつつ、説明書きと画面イメージを作成する。...案の定、更新時間には間に合わなかったorz。気を取り直して、ようやく投稿!


ActBarrier 製作過程