3月17日にお届けしたプログラミング記事では、PC-98 の BASIC と HSP を使って、同じ内容のお試しワンキーゲームを作ってみました。
その後も暇を見てはちょこちょこ遊んでいるうちに、少しずつ HSP に慣れてきました😄
これなら昔作ったゲームをほぼそのままの形で移植できるんじゃないかな~?
ってことで、今回からちょっと大きいプログラムの移植作業を始めてみたいと思います。
◆追記◆
PC-8801版の動画を末尾に追加しました。よければご覧下さい😄
今回はPC-8801のBASICプログラムを移植!
前回は PC-98 シリーズ用の N88-日本語BASIC(86) を利用しましたが、今回はさらに古い!
かなり懐かしい PC-8801 シリーズ用の N88-BASIC 。僕が 2番目に覚えた BASIC がこれ♪
ちなみに最初に覚えたのは SHARP の MZ-80B に附属していた BASIC です😅
当時使っていた PC-88 は初代機なので、フロッピードライブ無し、カセットテープに保存、白黒ディスプレイ、サウンドはビープ音のみという、ゲームには向かない環境💦
上の画面を見てもらえればわかるとおり、フリーメモリは 48,627バイト(!)という超限られた空間しかありませんでした。
ベーマガなどのプログラムを打ち込んで「遅~い!!」と文句言いながらも、動くことに感動しながら楽しんでいたのを思い出します♪
で、今回移植するプログラムは「アシュラの塔」というタイトルの RPG。
めっちゃスピードの遅い 88初代機で、さらに BASIC 覚えたてくらいの時期に作ったものなので、今のゲームと比べたらかなり貧弱です😅
プログラムソースは全部で 3つ。オープニング・メイン・エンディングです。それプラス、セーブデータのファイルが 1つで合計 4ファイルを 1枚のフロッピーに入れておけば動作するというもの。
今回はこの中からオープニングプログラム「tw_op.bas」を HSP に移植していきたいと思います。
PC-88版プログラムの動作
まずは、どのような流れで動くものなのか、そのまま PC-88版を起動させてみますね。
RUN コマンドで起動させると、数秒間画面がフラッシュしてその中に怪しげなキャラのシルエットが浮かび上がります。
ビープ音にちょっと音階を付けるマシン語をどこかから拾ってきて埋め込み、ちょこっと効果音として使ってみたり♪
黒のパレットに 8色しかない色をランダムにセットしてフラッシュさせていますが、昔は白黒画面だったので色合いなどは全然わかりませんでした~😓
最初のフラッシュシーンが終わった後、暗転した画面には「チョットマッテネ。」の文字。
裏側では上写真の絵を描かせています。上の画面を描くだけでも初代機では 20秒近くかかっていました。色を塗る時はタラタラタラ~っと超スローペース💦
全部描き終わったあとで画面を表示させ、「アシュラの塔」という文字をグラフィック画面へ出力、「PUSH SPACE KEY!」とコピーライト表示をテキスト画面に出力という流れです。
スペースキーを押すと最初のメニュー画面。めちゃシンプルな文字だけの画面!
「1」キーで最初から、「2」キーでセーブデータからゲームを始めるという選択肢。
「1」キーを押して始めると、主人公の名前入力画面になります。シンプルな画面ですが、主人公のドット絵も一緒に表示されていますね。
キーボードで 8文字以内の名前を入力してリターンキーを押せば次へ進みます。
初期ステータスのセーブデータをセーブするよ!という確認画面。ここでスペースキーを押すと、セーブデータのファイルが自動で作成される仕組みです。
なお、セーブデータは1つしか無いため、途中まで進めていてセーブデータが更新されている状態で、この画面でスペースキーを押してしまうと上書きされてしまいま~す😨
セーブが完了するともう一度確認画面となり、そこでスペースキーを押せばメインプログラムを読み込んでゲームが動くという流れになっています。
起動したゲームのメイン画面がこちら。マップの描画も 1マスずつスタンプを押すかのように描かれていくのがわかるくらい、処理スピードがの~んびりなマシンでした😅
1画面を描き終わるまで約20秒。多少待たされますが昔はこれくらい当たり前だったので、何の文句も言わず描き終わるのを見守っていたなぁ~。懐かしい♪
今回移植するのはメインプログラムではないので、先ほどのセーブデータ作成部分までになります。それではまず、オープニング部分に必要な画像を準備することにしますか。
オープニングプログラムの移植!
オープニングで使われていたキャラクターデータは 2つ。
起動直後のフラッシュ時に表示されていたシルエットと、名前入力時の主人公のドット絵。
この 2つの画像はプログラム内にデータ文で埋め込まれているのですが、HSPでそのまま使うことはできないため、PC-88版の画面をキャプチャして PNGファイルとして用意することに。
キャラクターパターンを画像ファイルに
こんな 16進数の羅列データ文、昔のプログラムではよく使われていました。260、270行が主人公のドット絵パターンで、サイズは 16×8ドット。
280~370行がシルエットに使われている画像で 32×20ドットです。これ、実はラスボスのドット絵そのままなのですが、プログラムでシルエットに見えるようにパレットを変更させたりしています。
実際のドット絵がこちら。左端が PC-88 の画面を取り込んだもの。88のカラーグラフィックは縦200ラインなので、1ドットおきに空行が入るような感じになっています。
そのブランク行を1つ上の行を引き伸ばす感じで補間して中央のドット絵に。これが HSP版で利用する完成形です。
右端はシルエット画像のドット絵。影なので本体以外の透過させる部分を白で塗りつぶしました。
完成した 2つの画像をそれぞれ「hero.png」「shadow.png」として保存。
フラッシュ部分までを作ってみる
雑誌やリファレンスマニュアルなどのプログラムをマネしながら覚えた N88-BASIC。学び始めた初期に書いたプログラムなので、その読みにくさはかなりのものですな💦
10行~15行目では色々な初期化処理。88の BASICを使っていた方なら見覚えのある命令ばかりだと思います。今回は詳細を確認するため、リファレンスマニュアルもチラ見しました😅
20行目でシルエットとなる画像パターンのデータを DATA文から読み込んで配列へ格納。30行目では特殊なBEEP音を鳴らすマシン語プログラムを読み込んでメモリへセットしています。
最初にご紹介したシルエット画像&画面フラッシュのシーンは 40~50行目で処理しています。
一度全てのパレットを黒にし、(304,40) にシルエットとする画像を表示。
FORループで21回分、ランダムで選ばれた色でパレット0の黒部分をその色にする。BEEP音をマシン語で鳴らしたらパレット0を黒に戻し、NEXTで頭に戻って繰り返す、といった感じ。
これを HSPで書くとこんな感じでしょうか。処理スピードの違いからリピート回数は増やしていますが、color コマンドでランダムに色をセットして boxf で画面塗りつぶし。
gmode コマンドで白抜きコピーの設定をして gcopy コマンドでシルエット表示です。なお、表示位置はちょっと前の行で pos 304,80 コマンドを使いセット済み。
88版のプログラムは縦200ドットなので 304,40 となっていますが、HSPでは縦400ドットとして作っているので、Y座標に関しては全てオリジナルの 2倍の数値でセットしています。
ほとんど同じような画面になりました。BEEP音の部分は後々別の音を当てるなどして対応するとして、とりあえず画面出力に関してはこれでOK!ちゃんとフラッシュしてくれました😄
フラッシュ処理後、88版ではグラフィック描画のために「チョットマッテネ。」を表示させていますが、HSPでは一瞬なので必要ありません♪
タイトル画面のグラフィック描画
88版のタイトル画面描画処理がこちら。ゴチャゴチャで見づらいですなぁ~😅
60~70行で、プログラム後方にある DATA文に書いてある座標を元に画面に線を引き、色を塗るという処理を行っています。
80~100行では BEEP音を鳴らしながらカラーパレットを元に戻し、X座標200から40ドットおきに一文字ずつ「アシュラの塔」という文字を出力しています。
PC-88の N88-BASICでは全角文字を直接コードに書けないので、このように表示していました。面倒だったなぁ~💦
その後の行では文字列をテキスト画面へ表示させ、スペースキーの入力を待ちます。
これと同じことをする処理を HSPで書き、完成したタイトル画面がこちら。PC-88版の画面とほぼ同じような描かれ方になっていると思います。
N88-BASIC の PAINT文に相当するコマンドが無かったので、どうしよう!?と悩みましたが、そこはグーグル先生のおかげで解決策が見つかり、無事同じ処理を書くことができました😆
メニューと初期セーブデータの作成処理
メニューなどの部分は中身がシンプルなので特に難しくありませんでした。
PC-88版と同じように、あえて全てカタカナのみで出力しています。座標系も同じ!
BASICで 80文字モードになっている場合、LOCATE文で指定する座標に X座標は 8を、Y座標には 16を掛けてあげれば、posコマンドでセットできる正しい数値になります。
ただし、40文字モードのプログラムの場合は X座標だけ 16ドット単位にする必要があるので注意。
名前入力画面はこのようになりました。BASICでは INPUT文で書いていましたが、HSP の input コマンドでは指定サイズの入力フィールドを表示してくれます。便利ですね~😄
文字数チェックまでやってくれるので、余計なチェック処理などを書かなくて済みます♪
Enter キーが押されたら次へ進むようにするやり方もググって発見。onkey gosub でキー判定すれば良いということも覚えました~。
最後にファイルへのセーブデータ保存処理を書いて、オープニングのプログラムはひとまず完成!
今回はとりあえず初版なので、notesel と notesave コマンドで普通にテキストファイル「asyura.sav」として保存しました。さほど苦労すること無く書けちゃうのは凄い!
といった感じでオープニングプログラムの移植作業はとりあえず終わり!
ここを作るだけでも HSP のコマンドを色々試すことになったので、勉強になっちゃいました。
メインプログラムは大きいのでちょっと大変になるかな。でもほとんどが基本命令だけで書かれているので、それほど苦労しないで形になってくれるかも♪
この続きはまた後日、作業を行ってから記事にしていくのでどうぞお楽しみに。
明日はいつも通り、通常のゲームプレイ日記に戻りま~す😄
追記!PC-8801版の動画です
オープニング部分からちょこっと遊ぶところまで、約2分半の動画に収録してみました。
フルスクリーンで再生すると、大画面で懐かしいPC-88を体験できますよ。
ぜひお試しあれ!😉
ポチッと応援してもらえたら嬉しいな♪
コメント