ラベル program の投稿を表示しています。 すべての投稿を表示
ラベル program の投稿を表示しています。 すべての投稿を表示

2026年9月1日火曜日

0901; Pythonをいらってみる。

 今からC#とかC++を覚える気になれないし、冗長なコードを書くのもなぁ…というわけで、初心者向け? のPythonをちょいといらってみる。

プログラムの書き方自体は、ベーシックでもCでもほかの言語でもそんなに変わらないでしょう…ですが、「オブジェクト指向」と「イベント駆動」ですか、このあたりの概念とかの理解が必要になってくるのかな?(・・? まぁ、イベント駆動(イベントドリブン、イベントハンドリングなど、いろいろと呼ばれていはいますが)は要するにDSの「メイドイン俺」みたいなものでしょう。

要は、ちょいちょいと簡単なものを作るのに、覚えていると便利かな? ぐらいの感じで。Cは20年以上前にちょっとだけ使ってはいたけど、いい加減にしか知らないので、もっぺんやり直すのも億劫だなぁと。

Python、PIP install ができないので、なんで?? と悩んでおりました。ネットでいろいろと解決策を調べて、ようやくできるように。まずは、そういったところからのスタートであります。



2026年8月29日土曜日

0829; 簡単に、適当にゲームを作りたい。

 「Windows ベーシック ゲーム制作」とかで検索をかけてみると、なぜかMSXを勧められる。確かにMSXは簡単(と思う)し、MSX2以降なら裏画面から画像をコピペすればキャラを簡単に表示できたりするのだが、VDP(画像処理)がマシン語を使っても遅すぎて使いにくいんですよね。

今のハードなら60分の1秒ごとに毎回画面全体を描き直しても十分処理スピードが出るので、裏画面から画像をコピペでキャラを表示という方法で2Dのゲームは画面を描くのですが、昔だとPCG(8×8ドットの文字フォントの形や色を変える)や専用のBGなどを用いて背景などを描画して、動かすキャラクタなどはスプライトというものを使っていました。GBAぐらいまではコレでしたね。PCエンジンやネオジオ、GBAなんかでもスプライトで背景を表示させたり、文字を表示させたりして、重ね合わせできない画面の代わりに使ったりもしました。PSだと、そういうものは全部ポリゴンで描いていたらしいのですが、その辺はちょっと分かりません。2Dは2Dで、GBAには画面の回転機能があったりと(スーファミにもありましたか)、それなりに技術の進化がありました。

3Dだと、当然扱う座標がXYZと3つになるので、空間を意識しなければいけません。途端に難しくなると思います。キャラクタなどを作るにも、モデリング作業が必要になります。基本的な技術としては、三次元に三角形を描くことでキャラクタなどを表現するわけですが、マシンパワーで膨大な量の三角形を描かなければいけませんよね。しかも、それにテクスチャマッピングをするわけで。さらにはサブディビジョンサーフェースなどの技術で表示を滑らかにするなど、ものすごいことをしています。製作コストも飛躍的に上がると思います。

そんなことを考えつつ。

2026年8月27日木曜日

0827; 簡単に使えるベーシックがWinに無いか調べてみるものの。

★Tiny Basicで、ライン文やペイント文などでの絵作りは分かったが、画像を表示したり音楽を鳴らしたり、ジョイスティックを判断させたりとかはできる? あくまでタイニーの機能しか無い?

★昔、一時期LGP(LightGameProgramming)というゲーム制作用のフリーのベーシックを触ったことがあるが、同様のものはある? 2Dだけじゃなく3DもOKという優れもの。今は入手できないけど、私は持っているので、使えなくはない。今の環境で使えるかねぇ? HSP(ホットスーププロセッサ)なら分かる、今でもあるし私もバージョン2.55ぐらいの時代から使っている(フォントの解析・ツールの作成とか、88ザ・キャッスルのステージデータ解析とかはコレでやった)。でもLGPって何やねん? って言われそう。

プログラムで何作る?
これはLGPで作ったもの

「UnityがやりたければUnityを覚えろ、Visual C#とは同じC#でも8割がた違う」とかネットに書かれていたけど、Unityなんか覚えても、そんなに使わないでしょうし。C+DXライブラリなんかも20年以上前に触っていたけど(APIでのプログラムもやったけど)、もっぺんそんなのやる? もっと簡単に、適当にプログラムしたいんだけど。覚えても、次から次へと新しい環境ができるからねぇ。


MSのSmall Basic? 古いActiveBasic?? プログラム環境は、ちょいと調べて考えてみよう。

2026年4月18日土曜日

プログラムに苦戦中。


なんで、こんなけのものがパッパとでけへんねん(~~; というわけですが。
一度、作り直しています。特殊なやり方をしているので、環境が変わったらガラッと作り方を変えないといけないので。よく昔は曲線ストロークフォントを作ったなぁ自分…って思います。当時は勢いで作れたのかしらん。
分からなくなったら、処理のフローチャートを思い浮かべて(書いて)、処理を分子レベルでひとつひとつ検証していかなければいけません。何かが間違っています。

しかし、思いもよらない間違い方だなぁ(~~;; なーんだろ。頭がショートしてきたので、今日はここまで。頭を使わなければいけないのだろうけど、頭使うのも疲れます。

ひとつひとつ、バグを潰していくしかありません。昔はもう少しサクッと作れたのかな?

2026年4月16日木曜日

HSPの作法を理解しなおすのに苦労。

 HSPなんて、大昔のバージョン2.4とかの時代から使っているんだけど、久しく使わないとスコーンと作法を忘れてしまいます。そもそも、なんでこんな変な仕様になっているんだろ。普通に昔のマイコンみたいに書けたらどんなに楽か…と思ってしまいます。

今日は if else 命令で苦戦。こういったものはMSXと比較して、こう書くんだよ…とメモしていますが、改めてそれを見ると「あぁ、そうだったなぁ」と(毎回悩むので、メモに書いていたんだわな)。ascとかchr$()とかもpeek・pokeでやるとか、そういう注意事項をまとめて書いています。でないと、毎回悩みます。

なんでHSP? となると、今でも生き残っているからでしょうな。Cとかでもいいのだけど、やっぱりベーシックの方が楽ですわな。

ActiveBasicとか、長らく更新されていないものを使うのはどうかいな? ってなっちゃいますよね。

2026年2月27日金曜日

Pillow(Python3の画面制御のもの)って、どうやってインストールするの?

 勝手移植のGBA終末の過ごし方を変換しようと思ったら、Pillowのインストールが必要と(Python3とVisual C++のものはインストールされているはず。でもC++が入っていなかったら入れる)

ちょっとPillowのインスコ方法を調べたけど分からず。またちゃんと調べ直してやりますか。

Pythonは覚えたいなぁ…と、ちょっとずつやっていこうかな? と思ってはいますが、他のことをやっていて、ちょいとほったらかす期間が長くなっていますな(--; プログラムでも何でも、覚えようと思ったら継続しないと忘れそう…ということで、ちょっとずつでも何とかしたいです。

C++もいらってはみたいけど、Cの知識だけでは難しそう(というか、たいていは「難しい」とネットとかに書かれていますわな)。つかま、C++覚えて何するの? でありますが。

昔はCでGBAのプログラムを作ったり、DXライブラリ+ボーランドのコンパイラで遊んだりしましたが、Cもご無沙汰であります。多分、スコーンと忘れていると思います。GBAだと、アドベンチャーゲームみたいに文字を表示させようと思ったら、64×64ドットだったかのスプライトを敷き詰めて、それに文字をその都度定義して表示される…という荒業を使います…というか、使うはず。重ね画面を持っていないハードだったはずなので、こういうやり方になろうかと。それは、PCエンジンやネオジオなんかもそんなゲームの作り方だったかと。そう考えると、X68の画面構成が贅沢過ぎたんですわな。

2026年2月1日日曜日

プチコン、変数と配列変数が被っちゃダメ(--;

 


これがMSXやX1なら何の問題もないんですわな。でも、プチコン3号ではダメと。

なので、これらを被らないように修正することに。不細工だけど、AとA[0](プチコン3号では A(0) ではなく A[0] というようにブラケット(大かっこ)で書かないといけません。小かっこで書くとエラーになります。命令の説明にも、わざわざそう書いてあります。昔のプログラマーなら当然小かっこで書くでしょうから)で被るところは、A_ というようにアンダーバーをつけて区別すると。諸行無常よのう。

~~~~

X1のプログラムの、タイトル表示のところに PRW なんて命令がありますが、調べてみたところ、これはテキストとグラフィックのどちらを優先的に(上に)表示するかという命令なのですな。それも色ごとに指定できると。どういうふうに使っているんだろう? とは思いますが、無視して問題ないですな。

音楽の鳴らし方は、BGMPLAY という命令を使えば、昔のマイコンのような感じで鳴らせると。ただ、ボリュームが 0~127 なのに注意と(MSX では 0~15)。@で音色を指定できます。そして、>で音階を下げて(低くして)、<で上げることもできます(高くします)。

音楽は全然聴きませんし、興味も持たなかったので、作曲しようと思ったら、まず何をどうしたら? 音楽理論なんてサッパリだぞ??(~~? ってなもんで、どうしたもんやら。

~~~~

ここまでプチコン3号をいらった感想としては「昔のマイコンの作法とは違うところもあるが、概ね何とかなる」でしょうか。基本的には小学生や中学生でも興味を持てば取り組める感じのものなので、プログラムの入門用に…といったところでしょう。

2026年1月31日土曜日

プチコン3号、独自の仕様に頭を抱えつつ。

 


STRING$ も、無ければ作る。なんで無いんだ? と思いつつ。

PRINT USING "#####" というやつは、FORMAT$ を使うの?(・・? まぁ、これは RIGHT$ でなんとかなるけど。

とにかく、昔の書き方が通用しません。PRINT C$(A-(A>0)*8) なんて書き方ができません。要するに、カッコの中が条件通りなら、そこの値を-1にしてほしい(そうでなければ0にしてほしい)わけですが、エラーを返されます。そういう場合は、とにかく動くように好きなように作り直します。

~~~~

学生時代は、ベーマガに載っていたこのゲームをMSXに自力移植し、キャラクタをスクリーン1.5モード(スクリーン2モード)で描いた…ということで、それをもっぺん試して描いてみたくはなるものの。MSXでは横8ドットに2色というキツい制限があるため、X1のものをそのまま再現できず、制限内で工夫しなければいけません。あれならば、主人公とロボットにそれぞれスプライトを1枚足しても大丈夫です。ゲーム中、スプライトは横に4枚までしか並びません。

画面もX1は横40文字×8=320ドットに対し、MSXでは横32文字×8=256ドットです。なので、画面レイアウトにも工夫が必要です。左上のプレイエリアはそのままで、右と下の情報表示エリアを縮めて収めて、スコアなどは一番上の壁のところに表示するなどになりましょう。で、色ブロックの説明は下のエリアに書くと。

~~~~

タイトル画面までは作りました。次なるミッションは「音を鳴らす」。プチコンで、どうやって音楽を奏でるの?(~~? というわけでありますが。昔のマイコンならば PLAY 文ですな。でも、プチコン3号にそんな命令はありません。どっちかといえば MIDI っぽい鳴らし方かな?(’’?


ここを見ている人は、こんなん書いて面白いの? とは思いますが、あくまで自分用の備忘録ということで φ(。。;

2026年1月30日金曜日

プチコン3号で拡張命令を作る。

 



昨日悩んでいたことは一旦無視して先へ進んでみる。とりあえず、ツールから抜けたら ACLS で LOAD"GRP5:~" でいいや。

さて、今日もなんとなく適当にいらってみる。…プチコン3号に STRING$(指定した字数の文字を得る)が無いのね(~~; 素直に "000" とか打てって? まぁ、8文字ぐらいなら打ちますよ。でも、これが50文字必要ならどうするの?(~~? ってなもんで。"000……" って50文字打ったら、チェッカーフラッグで Dr.D に怒られますよ(--;

A$="":FOR I=0 TO 49:A$=A$+"0":NEXT なんてのもアホみたいだし(--;;

現実的な線だと A$="":B$="0000000000":A$=B$+B$+B$+B$+B$ かなぁ(==;


X1のリストを見ていると、X1って LINE 文で文字を四角く表示したり、その中を塗りつぶしたりできるんですよね。命令を見て、容易に想像できます。LINE 文の書き方は、MSX でのそれと同じですから。というわけで、X1 から移植しやすいようにその命令を作ることに。その方が見た目にも分かりやすいですよね。

2026年1月29日木曜日

プチコン3号、BG周りをいろいろといらってみる。

 

BGを、専用ツールでポチポチとドット打ち。
プログラムを作ればフォントに登録もできる


BGの表示方法もすぐに分かりました。16×16ドットの単位で座標も指定するのですな。

これでゲームも作りやすくなりました。あとはこれをどう活かすか。

あれならスプライトとBGの一覧をプリンタで刷って、どんなゲームやプログラムを作ろうかなーみたいなことを考えてみるのも一興かと。いろんなキャラクタが予め定義されていますので、これからアイデアを膨らませてみると。

で、命令を調べてみると、その座標に表示されている文字を調べる命令や、その座標に表示されているBGを調べる命令もちゃんとあるので、ゲーム作りに便利ですね(MSXだと、VPEEKでVRAMアドレスから直接値を調べます)。

~~~~~~~~

ゲームに付属している専用のBG・スプライト作成ツールでBGのドットをポチポチと打ってみる。実はベーシックに戻って ACLS をやっちゃったので、打ち直しています。Xボタンでツールから抜けますが、この時にYを押すことでセーブできます。またはベーシックに戻って、ACLS でBGを初期化する前に SAVE "GRP5:~" でセーブです。
ただ、ツールから戻ってBGを表示しようにも表示してくれません。何かが引っかかっているんですよね。今日はちょっとこのへんいろいろと試していたのですが、分からず。ACLSをして、LOAD でBGを読み直したら表示するのですが、その都度BGをロードして読み直すのもマヌケなので、どうにかしたいところです。

これは昔、ベーマガに載っていたプログラムのキャラクタなのですが、プチコン3号に移植する?(~~? 当時、このX1用のゲームを自力でMSXに移植して遊んでいました。だって、誰も移植してくれないんだもん(前作は移植されたので、普通に入力して遊びましたが)。キャラクタもスクリーン1.5モード(偽スクリーン2モード)で描いて。自分で移植したにしては良くできていたので、ベーマガに投稿したろかな? とも思いましたが、その勇気は出ませんでした。今作るなら、MSX2で作るなり、マシン語で快適にしたりなんかもするかも。
このゲーム、X1のPCG(文字フォント)を左右反転して登録するようなコードが書かれていて、ブロックやらナメクジやらのキャラクタ定義が省力化・短縮化されています。誌面に限りがあるので、工夫しているわけですね。MSXでもそういうコードを書いたら、左右反転(や上下反転)はできます。

2026年1月28日水曜日

プチコン3号でスプライトを定義・表示して、十字で移動させる。

 


プチコン3号、グラフィックに COPY(PC88や98なら GET・PUT )でキャラクタを表示できるので、何かを敷き詰めたりすることはできます(MSX2では VDP が遅すぎて、マシン語でもつらかったんですよね)。BG が16×16ドット単位なので(のちにバージョンアップで8×8なんかにもできるようにはなりましたが、基本は16×16で考えます)、スクロールしないのならばフォントを並べてキャラクタを敷き詰めてもいいかなと。昔のマイコンはみなこんなんでしたし。

まずは仕様を知るところからです。例えば

10 ? MID$("12345678",3,1) ’左から3番目の文字を1つ
RUN

と書いたとき、MSX(とか昔のマイコン)なら一番左が1番目なので

3
Ok

となりますが、プチコン3号では一番左が0番目なので

4

という結果になります。今までの思い込みで作っちゃうので、要注意です。HSPなんかでも、FOR~NEXTの終わりの値の書き方が違ったりと癖があるので、このへん戸惑うのですが。

~~~~

というわけで、スプライトを定義して表示し、十字キーで移動させてみる。ベーシックだと簡単でいいですね。これだけで、ゲームを作れそうな気になります。

MSXだと遅すぎて、マシン語で書いちゃいますが(べーしっ君というベーシックコンパイラもあったけど、これぐらいならそんなもん使わんとマシン語でパッパと書くでしょう)。市販のソフトだと、なぜか音を鳴らす処理で十字キー(ジョイスティック)を判断したりしています。いろいろとカオスです。

ホント、プログラムってこれぐらい簡単に書けるべきなんですよね。Cとかで書こうとすると、やたらと面倒くさかったりしますから。昔のマイコン時代はベーシックのあまりの遅さに泣かされましたが(ベーマガのファミリーベーシックのプログラムなんて本当にマシン語ばかりになりましたから)、今の時代はCPUが思いっきり性能向上していますので、十分満足のいく速度で動きます。



2026年1月27日火曜日

プチコン3号を少しずついらっていこう。

 



ボケ防止のために、プログラムでも作ろうかと思い立つ。で、何で作ろう? と思った時に、全っ然使っていないプチコンで作ろうかと考える。

3DS自体、全然使ってきませんでしたからねぇ(’’; ということで。DSばっかりで遊んでいたので。今になって、ちょっとずつ3DSを使っていきたいなぁなんて思ったり。もし昔に、プチコンのために3DSを…と考えていたら、もう少しそっちに思考が行っていたかも知れませんでしたが、3DSって初期に値段設定に失敗して割高感があって、その後3DS LLでも割高感があって、2DSとか3D機能の無い廉価版が出て、3D何やってん…ってな感じになって、それなら次世代機に期待しましょうか、また3DSのソフトが動くでしょう…だったのですが、スイッチやスイッチ2では3DSの代わりにはならず…という現状になりました。

ただ、プチコンに限って言えばスイッチ2にもありますし、キーボードで入力できるようにはなりました。でも、基本的にはスイッチ2の中だけで完結してしまい、PCなどとデータのやり取りはできません。なので、そこまで使うかなぁ…とも思いますし、使おうと思えばまずスイッチ2を入手しなければいけません。それなら、HSPとかWindowsでプログラムを作りーな…ってなってしまいます。


とりあえず、昔取った杵柄がどれだけ通じるか。MSXとかなら打ちながら考えていましたが、プチコンではハッキリ言ってタッチペンでポチポチと打ちにくいので、紙に書くかWindowsのテキストエディタで打って考えてみることに。MSXなら、簡単に処理を試したい時は60000行から書いてみて、RUN 60000 でしたが、プチコンではプログラムをスロット1に切り替えて実行。少しずつ試しながら覚えていきましょう。

まずは計算の方法から。割る時は/、整数で商を求めるときは DIV(MSXでは¥)、そして余りを求めるときは MOD。IF文での比較で、等しい時は==(MSXでは=)、違う時は!=(MSXでは<>)。こういったところの違いの理解から。


何かを表示できれば、そこからいろいろとできますよね。ということで、まずはグラフィックにいろいろと描き、そしてフォントを変更するところまで。これで、BGを書き換えるだけでフォントを書き換えられるように。フォントは32,768色から好きな色を付けられます(BGは1677万色なので、それを32,768色になるように数値を丸めて変換しています)。X1みたいに8色とか、MSXみたいに横8ドットに2色・全体で15色とか、ファミコンみたいに透明を含めて4色のパレットを4つとか、そんなキツい制限で作っていたのが懐かしいですな。昔のマイコン世代の人間なので、グラフィックやBGでキャラを描いてもいいのですけど、なんか文字を並べていろんなことをしたいんですよ。

2025年2月15日土曜日

MSX版ザ・キャッスルのステージデータ圧縮方法を解析・その7。

 今回はアイテムの指定について。種類と位置ですね。



 前にスタート地点にマルガリータ姫がお出迎え…なんてことをしましたが、あれは近くの黄色い鍵をマルガリータ姫に変えました。

【アイテムA(2バイト目が 80h~92h)】
00 壺 10 ブロック 20 金庫 30 樽
40 ゴンドラの上下スイッチ 50 ロウソク 60 食獣植物 70 炎
80 戦士(猫) 90 魔法使い A0 司教 B0 騎士

【アイテムB(2バイト目が C0h~D2h)】
00 マルガリータ姫 10 フェアリー 20 マップ 30 無敵光線
40 ボンベ 50 チェリー 60 命の水 70 金塊
80 リング 90 十字架 A0 青鍵 B0 赤鍵
C0 紫鍵 D0 緑鍵 E0 水色鍵 F0 黄鍵

こんな感じ。ちょっと変な仕様ですが、難しくはありません。

今のところ、バイナリちまちまで分かっているのはここまでです。

2025年2月13日木曜日

MSX版ザ・キャッスルのステージデータ圧縮方法を解析・その6。

 横ランレングスの部分について、今のところ分かっているところまで。
もう、図の上にバイナリデータを書いたものと、実際のバイナリデータを見てもらえれば一発かと。城の一番左上(データ番号00)のステージです。




ランレングス(Run Length)というデータ圧縮方法は「どのデータを何個」という形で書いています。
で、キャッスルの横ランレングス部分のキャラクタは、手書きの図(ちゃんと作りたかったけど、面倒くさいので手書き)のように「2文字」で作られています。
で、バイトの上4ビットがキャラクタの種類、下4ビットが横に置く数(0なら1個、Fなら16個)ということになります。なもので、4Cと指定するだけで一番上のガタガタ部分の1行が書けてしまえると。ただ、並べられるのは横に13個分(26文字)なので、14~16個を指定した場合は次の行にもその余り部分が書かれる…というようになっているかと。
そうして見ていくと、ほぼそのルール通りのデータになっているかと。

城の作りで、斜めにカットされている部分は後で書きますので、ここでは無視します。

しかし、その中で( )で書いた(08)は、白ブロックが敷き詰められているので、本来は18にならなければいけないのでは?(・・? というのが今の疑問です。でも、今は後回しにして他のステージ例なども見ていこうかなと。

2025年2月10日月曜日

MSX版ザ・キャッスルのステージデータ圧縮方法を解析・その5。

 



書きたいことはあるけども、ちょっと今は体調不良で体がえらいのと、まだまだ解析が甘いのとで。
簡単に、こういうことはできます。マルガリータ姫は、別に妖精とかを助けなくても触れればクリアです。

 77f6  f2 cf ⇒ 02 d1

で、お姫様は玄関先まで迎えに来てくれます。こんな感じで改造すれば、エクセレントでチェリーを取るなんてこともできますね。

2025年2月8日土曜日

MSX版ザ・キャッスルのステージデータ圧縮方法を解析・その4。

 


プログラムレベルで解析を試みるのは最終手段だ…ということで。
チマチマとバイナリデータをいらってみて今のところ分かっているのはこんな感じです。…ほお、縦にもランレングスするのですか(・・;

自分がプログラマーなら、ロードランナーのステージデータの圧縮で、ハシゴなど縦に使われるものは縦にランレングスした方がいいよなぁ…と思っていましたが、そういう方法でデータを作っているバージョンは無い…かな? アーケードの面データがそれに近く、ベーシックのライン文みたいな圧縮方法なのですが(斜めに指定したら、四角く塗りつぶされるボックス文形式ではないのかな?)。アーケードのロードランナーのステージデータの圧縮方法は、解析しているサイトがありましたので、興味があったら調べてみてください。でも、メモリが無いなどで無制限にオブジェクトを配置できないのですよね。

2025年2月5日水曜日

MSX版ザ・キャッスルのステージデータ圧縮方法を解析・その3。

 


まだまだ解析が甘いので、もっとちゃんとしたところまで突き止めたい。

キャッスル、ステージの真ん中のブロック配置などはランレングスです。ちょっと数字をいらってみたら、こういう作りなのね…というのが簡単に分かります。しかし、左右の部分やアイテム配置と思われる部分をちょっといらっただけでも、画面全体に悪影響を及ぼすことに。特に、中央ブロック配置後のデータをいらってみると、画面写真のように豪快にバグります。
なので、普通の圧縮方法ではないのかな…?(・・? という感じがします。いらって解析するにはお手上げです。もう、プログラムレベルで解析を試みないといけないような。

これは私に分かるかな? いずれは自分でステージを作成するアプリ「MSXザ・キャッスルすてーじめーかー桜」(仮称)を作るところまでやってみたいものですが。

2025年2月4日火曜日

MSX版ザ・キャッスルのステージデータ圧縮方法を解析・その2。

 ネットでいくら調べても、誰もこういったことをやっていなかったので、しゃぁないな自分で解析してみるかと。

ザ・キャッスルを吸い出して(バッ活とか懐かしいですな)、デバッガのあるエミュレータで動作させてみると、E320Hがラファエル君のいるマップの位置であることが分かります。左上が00H、右の部屋にいくごとに01Hが足されていきます。そして、下の部屋に行くごとに10Hずつ足されていきます。ということで、スタート地点は70Hということになります。

プログラムを解析するのならば、これを取っ掛かりに「LD (E320H),A」「LD A,(E320H)」とかで検索をかけて、その周りを逆アセンブル…でしょうが、自分の場合はバイナリデータでだいたいのアタリをつけて、適当にいらってみる方式で。アーケードやファミコンのソロモンの鍵、ファミコンやMSXのフラッピーなんかは、そんなやり方でステージデータを解析できました。イシターの復活に至っては、ステージの形が2値ベタで入っていたりします。MSXフェアリーランドストーリーなんかもちょこっと圧縮はされていますが、ほぼ2値ベタです。

簡単に見たところ、前半はプログラムデータで(雰囲気で分かりますし、あれなら逆汗してみればいいかと)。そして、4000H~6300Hあたりはキャラクタデータです。キャラデータはyy-chrとかで見てみれば分かりますね。なら、ステージデータは6300H~7FFFHのところかなーと。で、このあたりを色々といらってみると…、ホラもうこういうことねと。

ちなみに、セガSG-1000版(MSX版のベタ移植)のザ・キャッスルもステージデータは同じ形式で同じように入っています。

個人的には、ファミコン版のキャッスルエクセレントを解析して、ステージデータを「ザ・キャッスル」にしたものを作りたいような気もしないではないですが、スクロールするパズルゲームはやりにくいと感じるので、あまり食指が動きません。

そして、オリジナルの広さでMSX版の仕様のキャッスルを遊びたい気もしますが、そうなるともう自力で移植するしかありません。それはファミコンやアーケードのロードランナーなんかにも言えるのですが、なぜDS版のロードランナーはチャンピオンシップの広さでエディットできないのか不満でありますな。CLR6000はスゴイと思いますが、やっぱり固定画面でやりたいのよパズルゲームは。

ログイン版X1ザ・キャッスルでは、マシン語のプログラムリストを見ると、ステージデータは1面あたり200H(512バイト)あります。もし製品版もこのデータ形式なら、100面で51200バイト必要となり、MSXのロムでは不可能です。

~~

圧縮方法でいえば、解析はしていませんが、ドラゴンバスターとかマドゥーラの翼なんかはブロック圧縮(大きなエリアを組み合わせている)でしょうね。ワンパターンな景色が続くでしょう? こういうのは分かりやすくていいのよ。

~~

つか、こんな話の続きを知りたいですか? ワシは自分とこのブログなので、好き勝手に書いてもいいのですが。どうせ誰も見ていないでしょうし、自分の備忘録として。

2025年2月3日月曜日

MSX版ザ・キャッスルのステージデータ圧縮方法を簡単に解析してみる。

 MSX版「ザ・キャッスル」(と「キャッスルエクセレント」)、名作です。よくぞMSXでコレを作ってくれたと思っています。とても素晴らしい出来です。ハードを知っている人間からすれば、奇跡の移植度であります。

メモリ8キロのMSXでも動きます…という触れ込みで、プログラム容量は8000H(32,768バイト)でできています。驚きの少なさです。たったの32キロバイトです。

Mマガ永久保存版にプログラマーの人が「少ないワークメモリで100面を動作させる工夫」と書かれているので、どんな面データの持たせ方をしているのだろう? と興味が昔からあったのはあったのですが、今になってちょいと調べてみようと思い立つ。ぶっちゃけ、自分でキャッスルのステージを作成したいとも思っていたりしたもので。ロードランナーみたいなコンストラクション機能が欲しかった。

「ひょっとして、特殊な圧縮がかかっていたり、ハフマン符号みたいな圧縮をしているの? ならお手上げだよ、プログラムを解析するしかないよ?」と思いつつ、簡単に調べたところ、どうやら

 ランレングス

ですね。これなら、ステージを画面キャプチャして印刷して、バイナリも印刷して見比べながら検証できます。工夫については良く分かりました。今のところ、細かい部分は全然分かっていませんが。

…この記事の続き、書くかねぇ?φ(・・?

2024年12月7日土曜日

GBC『DTローズオブゲノム』のメッセージ(文章)を解析中・その6

 


ハイパーテキストから読める、用語集のデータです。文章は、「カードの内容」⇒「インストラクション」⇒「用語集」の順に続けて入っています。
このゲームの文章は、難しい言葉を使いたがったり、難しい字を使いたがったりします。お前は週刊新潮か、誰がこんな字で文章を書くねんな…φ(~~; ってなもんであります。作者は中二病ですよね。
「専ら」や「所謂」は、知ってはいますがまず漢字で書きません。でも読めはします。「ふざける」に至ってはMSのIMEで出てきませんし、こんな漢字を書く人はひねくれものと思います。読めるのは読めるけど、実用的ではない字ですよね。