初代 PC-8801 の N88-BASIC で作成した、プログラミング覚えたての頃のショボイゲームを、そのまま HSP で移植して再現してみようじゃないか!というプロジェクトの続きです。
今回からはメインプログラムに突入!まずはメインのゲーム画面を描いていく処理、そしてマップパーツとマップデータの準備、最後にマップを表示させて歩くところまで進めますよ。
はたして PC-88 と同じような動きを再現させることはできるのか?挑戦開始だぁ~♪
白黒の画面を再現してみた
しばらくぶりに PC-88 のプログラムに触れているうちに、昔使っていたモノクロディスプレイの事も少しずつ思い出してきました。
何となくの記憶でググってみたところ、その型番まで判明!ネット上にはカタログ画像なども普通に見つかりました♪
ぜひ「PC-8851」で検索してみてください。14インチのモノクロームディスプレイモニターが見つかるはずです。昔はそのディスプレイで遊んでいました😄
そのディスプレイで見えていた画面が上写真のような白黒表示。当時はこのような濃淡しかわからなかったので、数年後にカラーで見てみたら奇抜な色になっていたというわけですね💦
ある意味このモノクロ状態で遊ぶ方が見やすいかもしれません。まともな形まで出来上がってきたら、この白黒表示モードも追加しようかな😅
まずは初期設定部分から開始
それでは BASIC のプログラムを HSP に移植していくとしますか~。
まずはメインループに入る前の段階、初期設定処理の部分から書き始めます。
何せ覚えたての頃に書いたプログラムなので、無駄な記述が多かったり書き方が汚いのはご勘弁を😅
画面初期化、配列設定、マップパーツの読み込み、ボスキャラのグラフィック読み込み、タイトル画面のプログラムでも使ったビープ音演奏のマシン語準備処理などが続きます。
110行の部分で呼ばれる *LD サブルーチン内でセーブデータの読み込み、*SC で画面作成を行い、*MA でマップを表示させたあと、最後の PUT@ 文で自キャラを表示しています。
BASIC では DATA 文にパーツ画像・ボス画像・マップデータを全て入れているのですが、今回作る HSP版では全て別ファイルに用意します。
画像とマップデータを準備する
最初はマップ表示に欠かせない、パーツ画像から用意します。
PC-88 の画面をキャプチャして取得した画像の隙間埋めを行い、下写真のように 16×16ドットのキャラクターを 12個並べた PNG ファイルを作成しました。
この画像ファイルを HSP でバッファに読み込み、マップ表示などに利用します。
次は RPG には欠かせないマップデータの作成!この作業には「Tiled」というソフトを利用しました。パーツをポチポチ置いていくだけで作れるので便利ですよ♪
先ほど作ったパーツを読み込み、縦横20マスのマップデータとして作成開始。
宝箱・扉などのイベント発生部分に関してはオブジェクトデータとして配置し、プログラム内でフラグを判定して表示させるようにします。
最初のフロアでは全部で 11個のオブジェクトが作られました。
これでとりあえずのテストに必要なファイルは出来上がったので、次は画面作成処理のプログラムに進みま~す♪
画面全体の描画処理を作る
先に紹介したプログラムでは初期設定後に *LD が呼ばれますが、まだロード処理が存在しないので画面作成サブルーチン *SC から作ります。
画面は全て単純な命令で描いているため、大半が LOCATE 文と PRINT 文ですね😅
BASIC のテキスト画面座標をそのまま書けるように、#deffunc で命令を登録しました。
名前もそのまま LocatePrint 😄 テキスト画面座標として、X が 0~79、Y は 0~24 を指定できます。
処理内容は、渡ってきた座標の数値を tx は 8倍、ty は 16倍して pos 命令でポジションセット!ms で指定された文字列を mes 命令で出力するという単純なものです。
で、実際に *SC を移植した *screenmake サブルーチンの先頭がこんな感じ。かなりすっきりとまとまりましたねぇ。まだまだコンパクトにできると思うけど😅
他に作った命令では、BASIC の LINE(x1,y1)-(x2,y2),B に相当する、塗りつぶさない四角形を描画する命令 BoxLine 。
指定位置にマップパーツを表示させる MapPartsPut 命令など。他にもいくつか作りました♪
で、とりあえずマップ表示の手前まで作成して実行してみた画面がこちらです。
88版のショボイ画面がしっかりと再現されました~😅
たったこれだけでもちゃんと表示されるものが出来上がると嬉しいものですよね♪
でも今回はまだまだ先へ進めますよ!
ステータスとマップ表示を加える
画面作成処理の最後に付け足すのが、ステータスなどの表示処理とマップの表示処理。
これらは今後も数値などが変化する度に呼ばれる処理になるので、サブルーチン化してどこからでも呼び出せるようにしておきます。
次に書かれているのが Tiled で作成したマップデータファイル「*.tmx」を読み込むために作った処理、TmxLoad 命令。ここを作るのがちょいと大変だったかな😅
でも tmx ファイルをそのまま利用できるようになったので、制作側としてはデータの取扱いがかなり楽になりました♪
読み込んだあとはマップ表示処理を呼び、最後に主人公を表示させて終了です。
実行させてみるとこんな感じになりました😆 一気にゲームらしい画面になった~♪
あとはテスト用の移動処理さえ付け足せば、とりあえず操作できるようになるぞ~!
ということで、今回最後に付け足すのは移動処理です。
キー入力判定ループを実装
今回最後に追加するのは、メインループとなるキー入力判定処理。
まずは BASIC の無駄だらけな記述からどうぞ😅
移動キーの「8」「2」「4」「6」と、セーブ・ロードコマンドを呼び出す「スペース」キー、アイテムを使う「リターン」キーの判定をしています。
当時はまだ短くまとめるだけの知識が無かったので、同じようなことを移動キー別に 4回書いちゃってます💦
とりあえず移動キーの判定だけを書いてみた、HSP でのメインループがこちら。
先ほどと比べたらかなりスッキリまとまってます。ちなみに BASIC では移動がテンキーのみでしたが、今回はテンキーと矢印キーのどちらでも移動できるように改良しました。
キーが押されていれば壁などの衝突判定、移動、イベント判定という流れで進めていますが、この段階では各判定処理は全てからっぽの状態。つまり全てを無視して移動します😅
この段階で録画した短い動画をアップしたので、ちらっと再生してみてくださいね♪
判定処理が存在しないので、思いっきり壁を無視して歩いちゃってます。
こうやって動かせるようになってくると、どんどん先へ進めていきたくなりますが、残念ながら時間切れなので今回はここで終了します。
次は壁などの衝突判定や冒険者との会話など、イベント処理も付け足してみたいと思います。
いい感じのペースで移植作業進行中!次回もどうぞお楽しみに♪
ポチッと応援してもらえたら嬉しいな♪
コメント