新規記事の投稿を行うことで、非表示にすることが可能です。
2023年09月01日
Laboratoryテーマ22「文字列から数値に変換したい」

さて、今回はLaboratoryテーマ22「文字列から数値に変換したい」です。
前回のメッセージウィンドウオープンで説明した通り、イベント制御には自作スクリプトを用意します。
しかし、スクリプトを読み込む際、数字も文字列として読み込んでしまうため、そのままでは数値として利用できません。
例えば、スクリプト「FE,12」(実行中イベントのフラグを12にする。)は、メッセージデータ上は文字列「46 45 2C 31 32」となっています。
そこで、数字部「31 32」を数値「12」化するためのサブルーチンが必要になります。
文字→数値変換のサンプルプログラムです。
「Ato9SMPL.BAS」【ダウンロード】
数字を含む文字列を入力すると、文字列中の数字部分を数値化し、数値として結果を表示します。
文字列データとなっている途中経過をASCIIコード化して表示します。

マシン語のサンプルです。
(因みに、メッセージウィンドウオープンのサンプルに既に入っています。)
起動すると、Ato9SMPL.BINを作成します。
掛け算のサブルーチンを内包しています。
0〜255までの値を変換可能です。
変換用のワークとして、5個の変数を使っています。
サブルーチンとしてアドレス変更する際は、そこの変更を忘れないように気を付けてください。(&HD0E0〜&HD0E4)
IN | OUT | ||
DE | 文字列数字部先頭アドレス | A | 数値 |
「BINSET.BAS」【ダウンロード】

マシン語のサブルーチンとして必要なのは&HC000~&HC03Fまでです。
&HC058~&HC06Fは文字列先頭アドレスから、数字部分を見付けサブルーチンコールします。
2023年08月31日
Laboratoryテーマ21「指定座標に指定サイズのメッセージウィンドウを開きたい」そのB

さて、今回はLaboratoryテーマ21「指定座標に指定サイズのメッセージウィンドウを開きたい」そのBです。
今回公開したメッセージウィンドウは、メッセージを表示するだけでなく、スクリプトを組み込むことが可能です。
スクリプトに命令を追加することで、複雑なイベント管理が可能となります。
今組み込んであるのは、下表の3命令。
命令 | 意味 | 記述 | 動作 |
NX | NeXt | NX | 次のメッセージへ |
FE | FlgsetEnd | FE,n | フラグをn値に設定し、イベントを終了 |
end | イベント終了 |
追加で組み込む予定なのは、下表の命令。
命令 | 意味 | 記述 | 動作 |
YN | Yes/No | YN,x1,y1,m1,m2,m3 | 座標(x1,y1)に「はい/いいえ」の選択ウィンドウを開く。「はい」が選択されたら、メッセージm1、「いいえ」が選択されたら、メッセージm2、キャンセルが選択されたら、メッセージm3へ |
SW | SelectWindow | SW,x1,y1,x2,y2,n | 座標(x1,y1)に幅x2、高さy2の選択ウィンドウを開く。選択肢数はn |
WO | WindowOpen | WO,x1,y1,x2,y2,l | 座標(x1,y1)に幅x2、高さy2のウィンドウを開く。lで枠線の有無設定(0:有 1:無) |
MS | MessageSpeed | MS,n | メッセージ表示速度をnに設定 |
JP | JumP | JP,n | メッセージnへ |
FS | FlagSet | FS,m1,e1,n | マップm1のイベントe1のフラグをn値に設定 |
ES | EventStart | ES,e1 | イベントe1を実行する |
CF | CheckFlag | CF,m1,e1,m0,m1,m2,m3,… | マップm1のイベントe1のフラグが0ならメッセージm0、1ならメッセージm1、2ならメッセージm2...へ |
CS | CheckSelect | CS,m0,m1,m2,m3,… | SWで選ばれた項目番号が、キャンセルならメッセージm0、1ならメッセージm1、2ならメッセージm2...へ |
IN | INn | IN,n,m1 | 宿屋、所持金額から人数×nを減らし、HP・MPを全回復させる。所持金額が足りなければメッセージm1へ |
IS | ItemShop | IS,n,i1,i2,i3…,m1 | 店屋、n種類のアイテムを購入、所持アイテムの売却する。店を出た時はメッセージm1へ |
とりあえず今回は必要最低限、こんなところです。
ロールプレイングゲームでは、キャラクタ移動命令等も必要になるので、あまり多くの命令を組み込むと、メモリが全然足りません…。
私がMSXでのロールプレイングゲーム製作を断念し、Windowsへ製作移行した理由の大半はそれです。
2023年08月30日
Laboratoryテーマ21「指定座標に指定サイズのメッセージウィンドウを開きたい」そのA
さて、今回はLaboratoryテーマ21「指定座標に指定サイズのメッセージウィンドウを開きたい」そのAです。
その@で公開したメッセージウィンドウに表示するメッセージデータを、レイアウトに合わせて作成するツールを公開します。
MESSET.BAS【ダウンロード】
使い方はサンプルに倣って、DATA文にメッセージを入力し「RUN」実行するだけです。

データレイアウトは下記となります。
【 レイアウト 】
イベント開始(0),メッセージ開始(1),メッセージ,スクリプト開始(2)(,スクリプト),1,メッセージ,2(,スクリプト),0,1,メッセージ,2(,スクリプト),1,メッセージ,2(,スクリプト),…,2(,スクリプト),END
0 | イベントデータ開始コード |
1 | メッセージデータ開始コード |
2 | スクリプト開始コード |
END | データ終了 |
イベント@ | 0,1,"おはよう。",2,"NX",1,"きのうはよくねむれた?",2 |
イベントA | 0,1,"やあ!",2,"NX",1,"きょうはねぶそくだよ。",2 |
イベントB | 0,1,"・・・",2 |
イベントC | 0,1,"ちょっとはなしかけないで・・・。",2 |
スクリプトは、次回説明します。
サンプルの中にある「NX」がそれです。
因みに「NX」は、「入力待ちして、メッセージエリアをクリア後、次のメッセージを表示」の命令です。
スクリプトが不要でしたら、記載の必要はありません。
記載がなければ、「ED」(EnD)命令が実行されます。
「ED」は、「入力待ちして、イベントを終了」の命令です。
下表はメッセージ中に組み込む制御コードです。
組込文字 | キャラクタコード | 動作 |
^ | &H5E | 改行 |
_ | &H5F | 入力待ち |
2023年08月29日
Laboratoryテーマ21「指定座標に指定サイズのメッセージウィンドウを開きたい」その@

さて、今回はLaboratoryテーマ21「指定座標に指定サイズのメッセージウィンドウを開きたい」その@です。
「ゲーム製作」カテゴリで制作中の3Dダンジョンロールプレイングゲームで利用する、ドラクエ風メッセージウィンドウの実装準備をします。
実はちょっと自信作です。
メッセージ本文中に「^」(キャラクタコード&H5E)で改行、「_」(同&H5F)で入力待ちとなります。
ウィンドウ枠の右端までメッセージが行くと、自動で改行されます。
また、ウィンドウ枠下端まで行くと、メッセージが上にスクロールします。
詳しくはサンプルプログラムで機能デモをしていますのでご覧ください。
メッセージデータは、レイアウト通りに登録しないといけないので、専用の「メッセージエディタ」を後日公開しますね。
「MWOPSMPL.BAS」【ダウンロード】
メッセージウィンドウの機能を紹介するデモが実行されます。
説明しだすと切りがないので、BASICサンプルと、下部変数表で色々試してみて下さい。

D006 | 表示先Y座標 |
D007 | 表示先X座標 |
D008 | 表示幅 |
D009 | 表示高さ |
D00E | ジョイスティック |
D010〜11 | イベント1フラグアドレス(&HD042) |
D012 | メッセージ表示速度 |
D014 | メッセージ枠無しフラグ(0:有 1:無) |
D042 | イベント1フラグ |
マシン語のサンプルです。
起動すると、MWOPSMPL.BINを作成します。
「MWOPSMPL.BAS」【ダウンロード】

かなり長いサンプルとなっています。
「選択肢」のサンプルはもっと凄いことになります。
因みに1260行から1380行は、独自スクリプトを組み込む予定です。
2023年08月28日
開発

以前にも書きましたが、本業が忙しく、難易度の高いロジックを含むサブルーチンの開発が、なかなかにキツイ…。
簡単なロジックなら、サクサク作れるので苦ではありませんが、現在制作中の3Dダンジョンロールプレイングゲームでのドラクエ風メッセージ表示や、メニュー選択(特にこっち)はなかなかなロジックです。
昔にもロールプレイングゲームを作っていたので、それを改良して…。と、思っていたのが大間違い。
やはり、サブルーチンとして公開するのと、完全組み込み型のプログラムでは難易度が違います。
まず、見易くしなくてはいけない。
これは言わずもがな、コメント細かく入れたりします。
次に、ある程度纏めなくてはいけない。
これが結構大変、昔なら以前書いたようにバグがあれば適当にバグを改訂したロジックを他のアドレスに組んで、バグのある部分からそこへ飛ばして終わり。だったのですが、公開するとなるとあちこちに飛ばす訳にはいきません。
第一、見難くなります。
バグが見つかると、そのルーチン内で直して、飛び先全部見直して…と、非常に大変です。(ハンドアセンブルの宿命…。)
また、昔はちょっと異なるだけのロジックがあった時、大きなロジックでも別々に組み込んでいました。
当然、容量の無駄です。
そこも公開にあたり、共通部分をサブルーチン化するなどして纏めています。
うーん、これも地味に大変です…。
ですので、昔のロジックはほぼ使えないので、一から組んでる状態です。
当然1日で開発できる訳ないので、「MSX回顧録」などで時間潰して、その間に開発を進めている状態です。
睡眠時間削って…。
そろそろ毎日更新は難しいかな…。
まぁ、「MSX回顧録」の溜まってる記事がなくなったら必然的にそうなりますね…。
でも、自分の性格上、毎日更新止めてしまうと、更新間隔がどんどん広がりそうで怖い…。
2023年08月27日
作品MPAC-MAN
次はこれ。
おなじみレトロゲーム、ナムコの「PAC-MAN」です。

本物のMSX版PAC-MANをプレイしていた時、友人が「お前ならもっときれいに作れるんじゃないの?」と言われたので、俄然やる気になって作りました。(2023年7月18日記事参照「制作が簡単なゲームジャンル(私見)」)
キャラクタはファミコン版のPAC-MANを参考にしました。
自己採点で、音関係以外は100点です。
(音関係は10点です…。)
こちらも目標とするため、エンディングを付けています。

おなじみレトロゲーム、ナムコの「PAC-MAN」です。

■主な新テクニック
・SPRITEが横に4枚以上並んだ時の点滅処理
・豊富なアニメーション
・敵移動アルゴリズム実装
・SPRITEが横に4枚以上並んだ時の点滅処理
・豊富なアニメーション
・敵移動アルゴリズム実装
本物のMSX版PAC-MANをプレイしていた時、友人が「お前ならもっときれいに作れるんじゃないの?」と言われたので、俄然やる気になって作りました。(2023年7月18日記事参照「制作が簡単なゲームジャンル(私見)」)
キャラクタはファミコン版のPAC-MANを参考にしました。
自己採点で、音関係以外は100点です。
(音関係は10点です…。)
こちらも目標とするため、エンディングを付けています。

タイトル | 『 PAC-MAN 』 | 作品 | 13 | |
内容 | モンスターを避けて、ドットを食べ尽くして下さい。 | |||
操作方法 | 操作説明は不要かとは思いますが、一応 起動し、しばらくしてタイトルが表示されたら、「スペース」バー若しくはAボタンでゲーム開始 開始させたコントローラーで操作します 「↑」「→」「↓」「←」カーソル若しくは十字キーで、自機移動 パワーアップエサを食べるとモンスターが一定時間いじけモンスターになるので、やっつけます | |||
対応機種 | MSX1、MSX2、MSX2+ | 製作年 | 1989年 | |
ダウンロード | リンク先へ | ジャンル | アクション | |
ライセンス | PAC-MANはバンダイナムコエンターテインメントの登録商標です。 |
※ゲーム内のキャラクタ、音楽は制作当時の物です。 公開前提に製作していないため、雑誌等から流用している物もあるかも知れませんので、著作権侵害の恐れのあるものは、ご連絡をお願いします。 |
2023年08月26日
居候生活

専門学校に高校から一緒に行った友人が、学校の近くで一人暮らしを始めました。
当然、みんなの溜まり場になります。

学校の帰りに寄って、毎日ゲームなどしてバカ騒ぎしてました。
かくいう私も、ほぼ居候状態で、家に帰らない日もしばしば。
当然毎日居座ってると、友人の友人とも徐々に顔見知りになって、仲良くなってと楽しい学生生活でした。
最初2人、しばらくし5人、そのあと6人と増えていきました。
6畳ワンルームなので、6人勢揃いすると、狭い狭い。
ゲームしたりして座っている時はいいが、寝る時は一人玄関前でした。
常時、居候してたのは私だけ。
後は、数日単位で入れ替わっていました。
その内、高校の友人が私がゲーム開発していることを他のメンバーに暴露。
というか、友人宅で開発したいからバラしました。
高校の時に移植した「テトリス」や「平安京エイリアン」を見せると、過去ゲームの移植依頼が殺到。
この頃、自作ゲームのラインナップに移植ゲームが多いのはそういう訳です。
ゲーム開発が始まると、MSXを私が占有してしまうので、他の皆はゲーム専用機。
当時はNECのPC-EngineのCD-ROM²が流行ってました。
友人宅には当然というか、なぜかテレビが2台ありました。
後はそれぞれのメンバーの家を転々と訪問し、団体で数日滞在を繰り返しました。
2023年08月25日
バイナリーエディタ
昔制作したゲームの公開にあたり、「SOLGER」以降「.BIN」ファイルのBASICソースがない。
これまでに公開した分も、エンディングのクレジット、実名で載ってるので全部「J-J SOFT」に書き換えてから公開しています。
しかし、ソースがなければ書き換えられない。
と、なるとバイナリエディタか、アセンブラ(逆アセンブル)使うしかないね。
と言う訳で、適当に探しました。
便利なバイナリーエディタ見付けました!
「TINY BINFILE EDITOR for MSX」です。

直接フロッピーディスクの中身を書き換えるので、バックアップを取ってからいじるようにしましょう。
MSX-DOS上で動作するので、MSX-DOS必須です。
MSX-DOSのディスクに「TINY BINFILE EDITOR for MSX」をコピーして使用します。
おぉ、MSX-DOSなんて、いつ以来だろう…。
昔はノーブランドの2DDのフロッピーディスク、頻繁に壊れてたので、バイナリーエディタでインデックスいじって無理やり復旧させたりしてました。
懐かしい…。
これまでに公開した分も、エンディングのクレジット、実名で載ってるので全部「J-J SOFT」に書き換えてから公開しています。
しかし、ソースがなければ書き換えられない。
と、なるとバイナリエディタか、アセンブラ(逆アセンブル)使うしかないね。
と言う訳で、適当に探しました。
便利なバイナリーエディタ見付けました!
「TINY BINFILE EDITOR for MSX」です。

直接フロッピーディスクの中身を書き換えるので、バックアップを取ってからいじるようにしましょう。
MSX-DOS上で動作するので、MSX-DOS必須です。
MSX-DOSのディスクに「TINY BINFILE EDITOR for MSX」をコピーして使用します。
おぉ、MSX-DOSなんて、いつ以来だろう…。
昔はノーブランドの2DDのフロッピーディスク、頻繁に壊れてたので、バイナリーエディタでインデックスいじって無理やり復旧させたりしてました。
懐かしい…。
2023年08月24日
資格試験

以前にも書いたとおり、私が通っていた専門学校は、資格取得に力を入れた学校でした。
最終目標は、当時、実務経験がなくて取得できる情報処理関係の最難関資格「第一種情報処理技術者試験」合格です。
しかし、これに受からない人のために、各種資格取得に向けた学習をしてくれました。
私が受けた資格試験は、
・日商簿記検定試験3級
・通産省情報処理検定試験1級
他にもあったかと思いますが、私は第二種情報処理技術者試験を1回目で受かったので、他の物は取りませんでした。
これだけ資格取得に拘った専門学校も珍しいのではないでしょうか?
本当にこの学校にしてよかったと思います。
ただ、資格試験の頻度が多く、ゲーム制作している暇がない…。
1作品1作品のクオリティを高めているのも相まって、ゲーム完成作品数は激減しています…。
2023年08月23日
【ゲーム制作】3Dダンジョンロールプレイングゲーム 第11回

3Dダンジョンロールプレイングゲーム第11回目です。
今回は3D表示のプログラミングに挑戦する予定だったのですが、ゲーム製作久しぶりすぎて、最初にやらなくてはならない事を忘れていました。
メモリマップの作成です。
ゲームを製作する時には、ツールを使うなりして各種データを作成し、最後すべて読み込んで1本のゲームにします。
と、いう事は、それぞれのデータの保存アドレスが重ならないように、データ保存する必要があります。(若しくは読込先アドレスを変更する。)
しかも、ロールプレイングゲームは、データの種類が多いジャンルです。
・マップデータ
・イベントデータ
・メッセージデータ
・アイテムデータ
等々…。
これらが重ならないように事前にデータ量と範囲を決めておく必要があります。
今回の3Dロールプレイングゲームのメモリマップは、現状下記としました。
アドレス | データ名 | 備考 |
A000〜A1B8 | 2Dマップデータ | 21マス×21マス=441バイト |
A200〜A7FF | 壁キャラクタデータ | 前回から保存先アドレス変更 |
A800〜AFFF | 空き | |
B000〜B7FF | フォントキャラクタデータ | 256キャラ×縦8バイト=2,048バイト |
B800〜BFFF | フォントカラーデータ | 256キャラ×縦8バイト=2,048バイト |
C000〜CFFF | マシン語エリア | |
D000〜D0FF | 変数エリア | |
D100〜DFFF | メッセージデータエリア | アイテムデータも含む |
ゲームの種類によっては、各面の最初にフォントを設定してしまえばフォントデータのエリアは不要なのですが、ロールプレイングゲームの場合は、敵キャラフォントを毎回読み込む必要があるので、読込先エリアとして空けておく必要があります。
うーん、キツキツですね。
MSX2以降だと、データをVRAMに保存してといったことが可能なのですが、MSX1だと厳しいです…。
メッセージ表示ルーチンとか、選択ルーチンとかは、かなり巨大なサブルーチンだけど、マシン語エリア(&HC000〜&HCFFF)に収まるのか?
因みに、タイトル背景の「Devils Busters」製作中にメモリ不足に悩まされて、ロールプレイングゲーム製作止めた過去があります…。

とりあえず、今のところはこれだけ決めておけば大丈夫です。
これに合わせて、各データの保存先アドレスを変更しておきます。
では、次回こそ、3D表示のプログラミングをしましょう。