Making「ストレトリ」(その2)

Home PC-6001mkII Program etc

 このページでは、メイン処理完了までの過程を書いています。

Making「ストレトリ」 Top


2006/11/03:それっぽい表示
 まだカーソル表示,判定処理,アンドゥ等色々と作る部分があるが、この辺りで実際の面データの展開と表示を行う事にする。

 面データは、以前に1マス1バイトで計算していたが、データに無駄が多いので1マス4ビット(1面辺り32バイト)に変更する。これで、16面分の面データでも半分の512バイトで済む。これで、少しだがBASICで使える領域が増えた。
 また、判定処理用領域も256バイトも使わないので、ワーク領域も移動させた。
項目アドレス(16進表記)
面データ(32バイトx16面分)E600H - E7FFH
グラフィックデータE800H - E85FH
プログラムE860H - EBFFH
表示画面と一手戻し用データEC00H - F3FFH
判定処理用領域F400H - F42FH
その他ワーク領域F480H - F4FFH

 ついでに、数字の色も市松模様風に色分け表示するようにする。試しに、HSP版の1面のみデータを入力し、面データの反映具合と表示を見る。...空白のキャラクタが真っ黒なので、殺風景になった。とりあえず、空白部分は中央に点を打ったキャラクタに変更する。

画面

 まあ、こんな所か。実際の面構成が出るようになるとほぼ完成したような気になるが、実際は動きや判定処理を全く作っていないのでまだまだだ。

2006/11/12:カーソルを追加
 表示ルーチンで、後回しにしていたカーソル表示に取りかかる。

 2つのカーソル位置とカーソル状態を表すワークを用意し、この値をもとに2つのカーソルを表示する。アドレスの変換は面倒だったが、まあ何とか作成できた。
 初めはキャラクタの中央下にカーソルを表示する予定だったが、実際に表示すると肝心の数字が見えづらいので右下に変更した。

 動作を確認するために、簡易的にカーソルを動かすプログラムを作る。...面データの展開時のアドレスがずれてた。ちなみに、11/03時点で表示がうまくいっているのは、表示ルーチンで読むアドレスも同じだけずれていたからだ。という訳で修正。

 次に、これものびのびになっていた判定ルーチンを作成する。処理概要は手詰まり判定とほぼ同じのため、一部処理を流用する。実質、判定処理用領域に入れる処理と結果を判定する部分のみ新規となる。

 ここで思わぬ障害が現れた。といってもプログラムではなくディスプレイモニタだ。ライン単位で、にじにじとランダムに左右に動くので、文字が非常に見辛くなり、集中力が続かない。うむむ、そろそろ替え時なのか?

画面


 ディスプレイのせいで集中力を欠きながらも、なんとか作成することができた。後は、数字を取る処理を加えれば、BASICの処理に移れそうだ。

画面


2006/11/19:消したり付け加えたり
 昨日はかなり調子が悪かったモニタも今日は特に問題なしだったので、このスキに処理の作成を進めて行く。

 判定ルーチンの延長で、数字を取る処理を加える。処理に必要な値のほとんどは判定ルーチンで求めているので、あっさり実装できた。テストの結果も特に問題はなさそうだ。
 ここで、簡易的に面作成が行えるよう、数字キーを押すとカーソル位置にその押した数字が表示されるようにしてみる。で、早速テスト。

 1,2,3...あれ?1と2が手詰まり表示から戻らない...。縦方向は大丈夫のようだ。右から3,2,1と入れると3と2が手詰まり状態になる(同じ見た目で結果が異なる)ので、手詰まり判定処理の初期化漏れっぽい。という事で、問題の場所を突き止めて修正する。

画面

 ...もう不具合はないよね?

2006/11/23:がーん
 もう不具合はないよね?という願いも空しく、選択範囲で取れるかどうかの判定に間違いがあった...。

 手詰まり判定の一行分判定処理を流用して、選択範囲で手詰まりになっていなかったら取れると判断していたが、これだと「1321」という組合せでも取れると判断されてしまう事がわかった。

画面

 やはり横着せずに、一行分判定内で使っている判定処理を呼び出せば良かったか。という訳で,処理を修正する。結果的に問題なく表示されるようになり、おまけにマシン語ソースも少し短くなった。最初からこうすれば良かった。

画面


2006/11/26:目論み
 いいかげんにBASIC部分も作り進めようと、ゲーム部分を作り始める。

 コマを取る部分までは出来ているので、後は面クリアの処理を行えばとりあえず形になる。ところが、面クリアの判定に必要な情報(画面上に残っているコマ数)がないので、残りコマ数をカウントするマシン語処理を加える。この結果をBASICから読込んで処理を行う。

 この他に、10/15時点で少し触れた「目論み」を入れてみる。それは、プレイヤーがコマ単位に色をつけられる機能だ。使い方は任意だが、例えば「このコマは縦に取る」事がわかっているときに縦を表す色を着けたり、一繋がりに取る予定のコマに同じ色を着けると少しは解き易くなると思う。

画面

 例えば上の図で言うと、右上の「8」を取るときは最低限「678」は一繋がりに取る必要があるので色分け→「7」の下の「6」は下の「54」に続くしかない事がわかる。

 今日で、このMakingのページを始めてから2ヶ月が経過した。休み毎に進捗状況を知らせるのは手間が掛かるが、このページのおかげで毎週少しでも進めようという気になる。依然としてペースは遅いままだが、完成までなんとか持って行きたいと思う。

2006/12/11:修正とタイトル画面
 11月末のイベントもあって、こちらの方がおざなりになっていたが、またボチボチ再開しようと思う。この調子でいくと、やはり今年中にも終わらないなぁ。

 まず、見た目上変わらない部分だが、BASIC部分でマシン語のアドレスを変数に格納するよう変更した。まだマシン語のアドレスが変わる可能性が高く、アドレス変更時にBASIC部分の変更を少なくするためだ。

 次に、一面クリア時の処理を模索する。これまでと若干違う感じにしたいが、なかなか上手くいかない。こちらはまだ見せられる状態ではないので後日にでも。

 その他、暫定的ながらタイトル画面を作成し、タイトルからゲーム画面へ流れを追加した。一応コンストラクションを視野に入れているが、作成した面データをどう保存するか(特にカセットへの保存の場合)が解決していない。どうしよ。

画面


2006/12/23:アンドゥと色設定
 長い間放っておいた、アンドゥ処理を作成する。アンドゥの処理はHSP版と同様単純で、以下のように表示データのメモリ転送しかしていない。
  • コマを一つ取るたびに、アンドゥ格納用アドレスを1画面データ分(89バイト)進めて、表示データの内容をアンドゥ格納領域にコピーする。
  • アンドゥを実行するたびに、アンドゥ格納用アドレスを1画面データ分(89バイト)戻し、アンドゥ格納用領域から表示データの格納先に内容をコピーする。
 また、アンドゥ処理のついでに、コンストラクションで作成中の面をテストできるようにするために、編集中の面の表示データを一時的にメモリに格納/戻しを行う処理も追加する。

 この他に、面毎の文字色の一つをBASICから指定できるように、面作成処理の変更を行った。これで、面毎に画面の色合いを替えることができるようになった。

画面

 あぁ、そろそろ面データも作らなきゃなぁ...。


その1 Making「ストレトリ」 その3