ActBarrier for プチコンmkII 製作過程 その4

Home PC-6001mkII Program etc

 このページでは、ActBarrierの高速化から完成までの過程を書いています。

ActBarrier for プチコンmkII 製作過程 Top


2012/12/09:高速化その4
 引き続き、細かい部分を高速化する。

 まず、中間的に変数に値を入れていたのを省略した。これで、45.3秒→44.5秒にタイムが縮まった。良い感じだ。
 並行して、1つの命令を50万回繰り返した時間を計るルーチンを作り、いくつかの命令の実行速度を調べる。

 どうやら、変数名の長さが長いと若干時間を取るようで、1文字長くなると0.3μs程度余計に時間がかかる。また、空行や注釈行でも意外と(約1〜1.5μs)時間がかかるようだ。

 変数名は元からほとんど1〜2文字だったが、一部で5文字になっていた変数を2文字に変更する。空行や注釈行は、あまり削ると後日プログラムソースを見るときに支障が出るので、特にループ回数の多い部分のみ省略またはループ外に移動する。

 さて、どれだけ速くなったか...44.5秒→44.2秒。なんとも微妙な性能改善だった。

2012/12/10〜11:高速化その5
 細かい部分を削減しても、これ以上あまり速くなる気がしない。少し考え方を変えるか。

 ここで注目したのは、敵の回転処理だ。見た目上は目立たないが、敵の残り体力に応じて回転速度を変えているので、回転の角度設定を毎フレーム行っていた。だけど、なにも1/60秒単位で変えなくてもいいんじゃないだろうか?

 という事で、敵の管理番号(0〜31)を8つずつ4種類のまとまりにわけ、まとまり単位で4フレームおきに回転角度の設定および自動補完を行うように変更する。回転速度の変化は1/15秒単位になるが、回転部分の処理時間は1/4ちょっとになるはずだ。

 さて実験...なぜか多少HIT数は減ったが、38秒ちょっとまで減った!本来は25秒で終わるべき処理だから、これでも約1.5倍はかかっているのだが、実際のプレイはここまで極端ではないので、許容範囲になるような気がする。

 という事で、通常の100秒プレイになるようプログラムを戻してみる。

 何度かテストプレイをしたところでは103秒前後だった。完全に処理落ちが解決したわけではないが、体感上、特に遅延は感じないのでこれでいいか。

2012/12/11〜15:ランキング保存
 ゲーム本編もとりあえず決着がついた事だし、ランキングの保存を真面目に実装するか。
 はじめは10位までのランキング文字列を全てMEMファイルに保存する予定だったが、どうやら文字数的に保存しきれない模様。うーむ、ならば仕方ない。得点とヒット数、日付の部分のみを切り出して保存することにするか。

 できれば自動でランキング情報の保存/読み込みをしたいところだが、いちいち確認画面が出るのは避けられないのかな?という事で、Webやマニュアルで調べてみる。読み込み時は確認なしで行けそうだが、保存は無理っぽいな。

 という事で、基本は手動保存で、別途ランキング情報が変わる度に保存を行おうとするセミオート保存も実装することにする。保存をしようとしてもユーザがキャンセルすることを考えると、こんな感じかな?
タイミング条件/動作保存モード
起動時ランキング情報ファイル(ACTB.MEM)がある
→ ランキング情報読み込み
0
ランキング情報ファイル(ACTB.MEM)がない
→ 初期値のランキング情報を保存
[はい]:2
[いいえ]:1
ランキング画面保存モード=1かつセミオート保存OFF→ON
→ セミオート保存の実行
[はい]:2
[いいえ]:変化なし
手動保存の実行[はい]:2
[いいえ]:変化なし
ゲーム終了時ランキング更新かつセミオート保存=ON
→ セミオート保存の実行
[はい]:2
[いいえ]:変化なし
保存モード=20
 ※保存モード 0:保存不要 1:更新(未保存) 2:保存完了

 セミオート保存切り替えと手動保存のキー操作を表示に加えようと下が、画面に入りきらなくなった。うーむ、6位以降は縦倍角はなしにしてテキストで描くことにするか。

2012/12/16:仕上げ
 あと一息。入れるべき機能は全て入れたので、あとはテストプレイと微調整を行う。

 今更ながらだが、セミオート保存だと事あるごとに保存しに行こうとするな。機能上矛盾が起きないよう作りこみはしたけど、要らなかったかも...?まあ使わなければ良いだけなので、とりあえず残しておくか。

 あ、せっかくだからランクインしたら色を変えるかな?という事で、プレイ結果の点数とヒット数がランキングと同じ行を赤で出力するようにする。

 たまたま同じ点数とヒット数の組み合わせがあったら複数行が赤くなるが、まあ実害があるわけではないし良いか。

 よし、完成!

2013/04/17:大喜利ネタ
 巷では、第2回 プチコン大喜利が開催されている。まだ作り始めてもないけど間に合うだろうか?

 昔にHSPで作っていた、とあるプログラムを移植しようと漠然と考えてはいた。けど、行動に移さないままここまで来てしまった。流石にあと2週間足らずだと無理があるかな?

 といったところで、Ackieeeさんより暗に「ActBarrier」の60秒バージョンのリクエストがあった。何も出さないのもなんだし、少し変えて出してみるか。

2013/04/18:派手
 という事で、既存の「ActBarrier」にいくつか手を加える事にする。

 まずはプレイ時間。100秒を60秒に削減する。難易度UPの傾斜も、このプレイ時間に合わせるようにする。ただ、耐える時間が短くなるので、若干簡単になってしまうかな?

 少し考えた結果、敵の移動速度を可変にし、時間が経つごとに最大速度を上げる事にする。

 あとは...もう少し見た目を派手にするか。という事で、爆風のキャラクタを試しに7x7のキャラにしてみる。少し派手になったけど、せっかくだしアニメーションで回転させようかな。

 回転パターンを手書きするのは面倒なので、星型を計算で描画することにする。16x16あたりの大きめなサイズで描画して、8x8に入るよう縮小するか、と描き始めたが、途中で魔が差した。このままの大きさで表示しても良いんじゃないか?

 という事で、試しに大きい星型のままゲーム画面を表示してみる。

画像

 うわ...派手だ。でも、短時間決戦の大喜利ネタとしては、これくらいインパクトがあった方がいいかも?

2012/04/20〜21:隠し
 言うほどプログラムを変えてないけど、これで投稿しようかな?

 とプチコン大喜利の投稿用ページを見ると、なぜか隠し機能に関する入力項目を発見。これは...隠しを入れろという事か?きっとそうなのだろう。

 うーむ、どうしようかな?パレットを変えるくらいならさほど速さに影響もなさそうなので、色でも変えるか。
 という事で、色モードの設定と、色モード別のパレット定義や色設定の処理を追加する。ついでに色モードを変えた時はタイトルも変えて、制限時間を1/100秒ほど増やすか。

 あとは最初の制限時間をもう少し見やすくするために、ゲーム開始時の効果を追加する。これで、わかる人にはニヤニヤできる出来になったかな。

 あまり隠しというほど隠れてないけど、これで「ActBarrier 60」が完成。改めてプチコン大喜利への投稿を行った。


その3 ActBarrier for プチコンmkII 製作過程