【PCエンジン研究室】
PCエンジンで動くゲームプログラミングに挑戦しています。
Windowsに展開すればそのままご利用いただける拙者のしょっぱい開発環境と、機能単品レベルでテストした結果のサンプルソースを順繰りに公開してみます。

「ビックリマンワールド」AC・refine
つまり、PCエンジン版「ビックリマンワールド」を「ワンダーボーイ・モンスターランド」化する試みです。
どこまで実現できるのか分かりませんが、ただいま鋭意改修中です(2026/07/02)

なんとなく調べていたら、256Kbyteというサイズにビビった。どうやって入れてんだ...💦 pic.twitter.com/ZV9JQjStob
— 二天一流ore (@ore57436902) January 28, 2026
その後ソースコードを解析し、タイトルシーンBGのCGデータをVRAMへ転送している処理を見つけました。
— 二天一流ore (@ore57436902) January 31, 2026
タイトルのCGキャラクターも3 bit planeでROMに格納されており、実行時に4 bit planeに拡張しながらVRAMへ送っています。
3/4のデータ削減になっているということですね。#PCエンジン pic.twitter.com/hLQJDxwjpa
#ビックリマンワールド
— 二天一流ore (@ore57436902) February 14, 2026
サウンド関係のプログラムやデータの全貌が明らかになりつつある。
ある程度予測していたが、PCE移植時にカットされていたドアノックなどの、「音」についてはHuCard内に残されている様子。
あと、知らね―音がまあまあある。ACの未使用音とかですか? pic.twitter.com/C5KI9YO4Og
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) March 25, 2026
「笛を吹いた」の楽譜データ発掘。発声5チャンネル定義したものの結局3chだけで済ませて重ね再生している。
AC版では5ch重ねだったのをそのまま持ってきてみたが、PCE音源ではそこまで重ねなくてもあの爆音が再現できた..というような経緯があったんだろうか pic.twitter.com/GbDd37olPH
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) March 24, 2026
ようやく....エンディング曲の楽譜データの解析に到達中
(どうみても楽譜です) pic.twitter.com/Ab2C2JEVfK
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 2, 2026
初期の頃に調べてあったけど再確認中。
・タイトルのCGは3bppフォーマットでROMにおさめられている(実行時にゼロ埋めで4bppに拡充)データを3/4圧縮していることと同義。
・これはパレット内16色のうち、0~7番の色だけを使うようにすることで実現できる pic.twitter.com/4JVo208iOY
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 2, 2026
一つ明確におかしいところを見つけた。
笛の音が再生するたびにちょっと違う。
これはサウンド処理というか楽譜データの書き方に穴があるだけかもしれないけど pic.twitter.com/HK3HCQN7Wh
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 2, 2026
PCEの音源だと周波数データはこれ(画像1枚め)だと思うんだけど
ビックリマンのこの値(2枚目)なんなんだろう
モンスターランドの音源だとこれだったのかもね
確かに実行時この値をむりやり変換しているフシがある pic.twitter.com/Jvm4FI3qRi
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 3, 2026
ROMデータの中に、再生リクエストすら不可能になっている隠された楽譜データが埋もれていた。
とりあえず3つ、強引に再生してみた。
1つめは剣を振る音とほぼ一緒?
3つめ...何やこの曲は...
これらはモンスターランドの基盤ROMにも入っているんだろうか? pic.twitter.com/sZ4jxieCY4
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 5, 2026
無敵設定をさらに強化実装。
敵の飛び道具攻撃や、砂時計によるダメージも無効に。 pic.twitter.com/sHFhOfDpAr
あと残り$3000バイトほどの16進数の羅列を楽譜データに手直しすれば
— 二天一流ore (@ore57436902) March 26, 2026
ビルドして実行可能なプログラムソース&データ一式が完成する。
多分な。#PCエンジン#ビックリマンワールド
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) March 24, 2026
ようやく....エンディング曲の楽譜データの解析に到達中
(どうみても楽譜です) pic.twitter.com/Ab2C2JEVfK
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 2, 2026
初期の頃に調べてあったけど再確認中。
・タイトルのCGは3bppフォーマットでROMにおさめられている(実行時にゼロ埋めで4bppに拡充)データを3/4圧縮していることと同義。
・これはパレット内16色のうち、0~7番の色だけを使うようにすることで実現できる pic.twitter.com/4JVo208iOY
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 2, 2026
3か月の苦労のあとは、ひたすら楽しみしか無い☆
プログラムに空き容量があるので233byte拝借して、サウンドテストを作ってみた。
タイトルで↓ボタンを押すと出現する仕掛け。
やりたい放題で面白すぎて夜ふかししそうw pic.twitter.com/eZsYjZsfOR
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 2, 2026
モンスターランド1面曲ってeef+gf+edbeebだっけ?
ビックリマンだとレトロハードに有りがちな、A始まりの12音階らしくて、楽譜マクロがずれて ggaa+agfdになっちゃったなぁ...
ただ楽譜としてはACと違いがないようなので、ビックリマンがキー-2なのは(文字数)
まあこれですよね
— 二天一流ore (@ore57436902) April 3, 2026
2音半さげた状態 のところ...
「2半音さげた状態」
なら正しいと思うので、実際に言葉のあやでいってしまったか、もしくは記事起こしのミスだと思います!#ワンダーボーイ#モンスターランド#ビックリマンワールド pic.twitter.com/i5c9ZP0vHO
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 5, 2026
今後の作業のためデバッグメニューを作成中。
任意ラウンド開始と、無敵(hit有り無しの2種類)を設定可能に。
1面から始めないと剣がない状態になってしまうが、その場合いったん強引にフル装備にしてみた。
このフル装備はROM内の隠し機能を発掘したもの。 pic.twitter.com/NQkBHsltmY
ここにお店があることを今はじめて知った(;´Д`)#ビックリマンワールド#モンスターランド pic.twitter.com/nUGKAylwQT
— 二天一流ore (@ore57436902) April 8, 2026
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 8, 2026
エリア選択機能、完成!
....してねぇ!!(助けてー) pic.twitter.com/Sl3EGoBQby
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 13, 2026
ザコ敵ダメージ時の修正点2つは以下の通り
①カラータイマー
②アウトライン発光
いずれもビックリマンではオミットされている仕様です
②は地味すぎて知られていないかもですね
まずカラータイマーについてモンスターランド側をあらためて調べてみました。 pic.twitter.com/4XVevpUzfM
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 14, 2026
ザコの応用改修になりますが、プレイヤーのダメージ吹っ飛び中にもアウトライン発光を施しました。
敵と違って ①吹っ飛び発光時間→②無敵点滅時間 というシーケンスになっており、防具が良くなるほど①の時間が短くなっていくという仕様を初めて知りました。 pic.twitter.com/1OYkZsxOIc
#PCエンジン#ビックリマン
— 二天一流ore (@ore57436902) April 16, 2026
プログラムROMの空き容量の現状況
RP00: 空き$1fa→ $a7 byte
※カラータイマーや錬金技の実装などで消費
RP01: 空き$409→ $49 byte
※debug機能で消費
RP04: 空き$89 byte 未使用
RP12: 空き$3a6 byte 本当に空きか要確認
CG用ROMに空きがあるかは今後の調査課題
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) May 3, 2026
ゲーム内で扱われている様々な形式のグラフィックスデータを解析するため、自作ツールを強化してるんだが...もう何週間も作業経過しているけど全然終わらないなぁ~。
とっかかりのフォーマット1種類目(sce sprite 3bpp)にしか対応できていない。先は長い。 pic.twitter.com/uCqGzIQBe6
よっしゃ!
— 二天一流ore (@ore57436902) May 8, 2026
圧縮には何の問題もなくて、やっぱPCE側の解凍処理にちょいと抜け穴があった...これで6キャラ全員プチ圧縮完了!#PCエンジン#ビックリマンワールド pic.twitter.com/DTHYRlGrsD
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) May 11, 2026
ということで、洞窟のオレンジ占い師完成~
ラウンド1の紫の占い師のキャラID=$00で、
bit7を立ててキャラID=$80として呼び出すと、占い師パレットの後ろにある未使用の8色が適用されて、色替えが実行される仕組み。ついでにセリフ内の「ジュラ」も修正。 pic.twitter.com/vSQpK8ckEL
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 12, 2026
ザコ敵のダメージに関する、ある2つの改修を行いました。※改修前後の比較用動画です pic.twitter.com/4zsSsLqIRg
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 14, 2026
錬金技をいくつか実装してみました。
①レバガチャ..最も知られているけどoreが最も苦手なやつ。成功シーンだけ動画にしたけど実際は打率2割以下
②被ダメ..位置と向きを間違えなければほぼ100%成功するやつ
③剣出し..6面+布のブーツならボタン同時押しでほぼ100% pic.twitter.com/d8Ky6A2HgS
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 15, 2026
残りの錬金技...魔法3種類を使う方法について実装してみました。
・竜巻..最も出しやすくハイスコア攻略の基本になっている
・ファイヤー..敵がいないと出せないのが欠点
・爆弾..爆発の瞬間じゃないと出ないので無理..つーかこれ魔法なの? pic.twitter.com/xUt8mDIz5Z
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) April 19, 2026
予想通り、
テキストデータの中にもこういうのがそのまま残されているようだ。#モンスターランド pic.twitter.com/PRAlaAFimL
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) May 5, 2026
現段階でも8色制限することである意味3/4サイズ圧縮していると言えるコイツラだが、更に少しでもROM容量を稼ぐ必要があるため、圧縮シミュレートを試みる。
LZSSには多少期待していたが、やはりこういうデータは基本的に圧縮しにくいな。 pic.twitter.com/LaLcyTcwVQ
#モンスターランド
— 二天一流ore (@ore57436902) May 10, 2026
占い師さんをBMPで用意しておき、自作ツールにBMP読み込み→PCE向けデータ変換できるようにしてみた。
おおーやっぱモンスターランドのキャラさんのほうがデザイン的に俄然圧縮が効くよw
ビックリマン系だと80%付近がやっとだったのに、いきなり65%くらいに。こりゃ助かるわ~ pic.twitter.com/yVCUOHODy9
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) May 13, 2026
お店・部屋系キャラを一通り変更したので、全ラウンドを点検してみました。
その結果、要修正箇所が3つほど... pic.twitter.com/pXtR3MVzKI
#PCエンジン#ビックリマンワールド#ワンダーボーイ#モンスターランド
— 二天一流ore (@ore57436902) April 3, 2026
のプロの皆様、曲のキーはこれでよござんす? pic.twitter.com/PfCSX51uo1
証明するために、ボスの扉の真上くらいにプレイヤーのY座標をむりやり書き換えてみました
— 二天一流ore (@ore57436902) May 20, 2026
...隠しコイン出たwwww
【回答】ラウンド4雲の上の3連続隠しコインは、ビックリマンでは設定ミスでボス扉の真上の空中あたりに配置されてしまっている#PCエンジン#ビックリマンワールド pic.twitter.com/mmtaVrBCkK
そういうわけで思いっきり訂正になります
— 二天一流ore (@ore57436902) May 21, 2026
4面雲の上の隠しコインx3枚は、ビックリマンではデータごと消去されているという結論になりました!
こうなるとやはり、吹き出しが丸かぶりでスプライト欠けが酷かったことが原因...という推測に信憑性が高まりましたね。#PCエンジン#ビックリマンワールド pic.twitter.com/d0HrepVx7E
ゼロランレングス展開、やっぱ最初の1byteデータにより4パターンの展開処理分岐があったわ...
— 二天一流ore (@ore57436902) June 4, 2026
これは大変な物量になりそうだな#PCエンジン#ビックリマンワールド
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) May 20, 2026
確かにここコイン出ないな...なぜだ?調べてみよう。
他にもこういう所あるのかな? pic.twitter.com/LNdkziuH9Q
えーとまてよ、頑張ってウイングブーツを出せれば、空中に配置されちゃっているビックリマン限定隠しコインx3を出せるのかな?
— 二天一流ore (@ore57436902) May 21, 2026
あとで試してみよう..#PCエンジン#ビックリマンワールド
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) May 28, 2026
エリア内スプライトcgの解析に入った。
ようするにザコとかボスとか動くブロックとかが固められたデータ。
いくつかの圧縮タイプをヘッダで判断して展開分岐している..かな? ザコ(16色フルcg)は主にゼロランレングス法のようだ。 pic.twitter.com/KWysjx7OYf
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) June 17, 2026
1面ボス差し替えテスト
元のボス「サタンマリア」のグラフィックスは8色制限で3bpp扱い+更に圧縮をかけてあるので、16色フル使用の「死神」だとデータサイズが肥大化。
が、少々圧縮法に手を加えたら「サタンマリア」より小サイズに縮まってなんとかなった.., pic.twitter.com/SvpS7SLY03
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) June 18, 2026
ボス差し替え第2弾「レッドナイト」
...いや、キャラの大きさ結構違うやん💦
・ボスのROMデータが小さくなった
・ヒット処理を探して直さないといけない
・ビックリマンでワンダーマリア化されたどさくさに、アニメパターンを1つ削られてしまっていることを発見 pic.twitter.com/eneMnnyfJW
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) June 25, 2026
ボス差し替え第4弾「クラーケン」
・スーパーデビル化された際にやはりコリジョンが一回り大きく変更されている。あとで直さないと戦いにくい💦
・パターン数もAC版から3→2に減らされていることが判明 pic.twitter.com/xqRWAqR9Pb
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) June 30, 2026
ボス差し替え第6弾「スフィンクス」
・全体的に絵がズレている。上に1dot左に2dot修正予定。
・これもサタンマリアから一回り小さくなっているけど...コリジョンにあんまり不自然さがないな。AC版で一度も闘ったことがないからよく分からんだけかもしれんが。 pic.twitter.com/2ZX1iKnp0G
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) June 24, 2026
ボス差し替え第3弾
「貧乏神」「ブルーナイト」「シルバーナイト」
色差し替えだけの作業ですが、動画ではボス部屋だけでなく道中での出現も点検中~ pic.twitter.com/rRcyY2krZ8
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) June 27, 2026
ボス差し替え第5弾「バンパイア」
・(今度こそ本当に)スーパーデビルからの改修
・コリジョンの差異はそこまで感じられない
・弾発射のサーチ角度がちょっと変えられている気がして被弾しやすい(要検証)
・羽を動かすパターン数2→1に減っていることが判明 pic.twitter.com/vfn1IS0Chv
#PCエンジン#ビックリマンワールド
— 二天一流ore (@ore57436902) July 1, 2026
ボス差し替え第7弾「デーモン」
「ネロましん」化されていた影響でやはりコリジョンがデカい。けっこう何もないところで剣が当たる感じ。
ボスのコリジョンはいずれまとめて改善が必要だね。 pic.twitter.com/OOhyvda42O
1.開発環境+Sample1「適当BGキャラ表示」 の基本セット
サンプルソースその1「適当BGキャラ表示」
PCエンジンのサンプルプログラミングに挑戦.
まずは取っ掛かりとして、画面になにか描いてみます.
BGキャラ(タイルとかCGと読んでいるらしい)を表示してみました.
▽こちらからダウンロードできます
※)2.以降のサンプルは、「開発環境+SAMPLE1の基本セット(ZIPファイル)」で展開されたあとのパス「RetroHardSoftDevelop/PceDevelop/」フォルダの下に追加で展開することで、ご利用いただけます。
2.追加Sample2「スプライト表示(SG)」
サンプルソースその2「スプライト表示(SG)」
BGの次は、スプライトの表示に挑戦です.
BGとSGさえ表示できれば、今後なんとなくゲームっぽいものが作り始められるんじゃないかっていう魂胆です.
▽こちらからダウンロードできます
3.追加Sample3「BGスクロール」
サンプルソースその3「BGスクロール」
BG画面のスクロールに挑戦します.
スクロールさせるために、V-Sync割り込み処理とワークRAMの利用が必要です.
V-Sync=フレーム単位での処理を書き始めると、グッとレトロゲームプログラムらしくなります.
▽こちらからダウンロードできます
4.追加Sample4「パッド操作」
サンプルソースその4「パッド操作」
コントロールパッド操作で、BGをスクロールさせてみます.
パッド操作ができるようになれば、更にいろいろなことを試してみたくなるのではないでしょうか.
また、ソースコードが大きくなってきたので、グラフィックスの初期化処理を関数化し、display.asmという別のファイルに分割してみました.
▽こちらからダウンロードできます
5.追加Sample5「スプライトを動かす」
サンプルソースその5「スプライトを動かす」
Sample2で固定表示だったスプライトを動かしてみます.
SATデータをWRAMに置き、V-Syncのたびにその内容を書き換える、といった処理をIRQ1割り込みの中で行います.
▽こちらからダウンロードできます
6.追加Sample6「パッド操作でスプライトを動かす」
サンプルソースその6「パッド操作でスプライトを動かす」
コントロールパッドの操作で、スプライトを移動させてみます.
基本的なスプライト更新の仕組みは、sample5と同じです.
コントロールパッドの処理と保存用WRAMをセットで、pad.asmというファイルに分離してみました.
▽こちらからダウンロードできます
7.追加Sample7「サウンド再生」
サンプルソースその7「サウンド再生」
本サンプルより、サウンドテストプログラムに挑戦します.
PCエンジンのサウンドは波形メモリ音源と呼ばれ、事前に波形データ=音色を設定する必要があります.
最大6つのチャンネルで同時再生できますが、まずはチャンネル0番、1番の2つだけで鳴らしてみます.
▽こちらからダウンロードできます
8.追加Sample8「サウンドで音階を鳴らす」
サンプルソースその8「サウンドで音階を鳴らす」
コントロールパッドの操作で、音階を選んで音を再生できるようにしてみます.
スクリーン上に鍵盤を表示させるため、BGキャラのデータを増やしてみました.
また、選択音階カーソルをスプライトで表示させていますので、今回はじめて、SGとBGを両方取り扱うプログラムとなっています.
▽こちらからダウンロードできます
9.追加Sample9「サウンドでノイズを鳴らす」
サンプルソースその9「サウンドでノイズを鳴らす」
サウンドチャンネル4,5番のみ、ノイズ再生機能を有しています.
コントロールパッド操作で、ノイズ周波数を変化させながら視聴できるサンプルを用意してみました.
▽こちらからダウンロードできます
10.追加Sample10「PCM再生」
サンプルソースその10「PCM再生」
PCEではPCM再生も可能です.
任意のサウンドチャンネルの波形データをセットするレジスタに、PCMデータをセットし続けることで音声が出力されます.
・データを定期的に繰り返しセットする処理には、PCEに備わっているタイマー割り込み機能が利用できます.タイマー割り込みの頻度次第で、PCM音声の品質が変わりますが、本サンプルでは最高品質と思われる約7KHzのサンプリング音声をテストしてみます.
・その他、プログラムバンク切り替えやゼロページRAMの利用など、新要素も目白押しの内容となっております.
▽こちらからダウンロードできます