ブロック崩し制作ツール『B2』を使って、Flashのブロック崩しを作ってみました(令和6年)。

↓ゲームページはこちら
2021年のFlash Playerサポート終了により遊べなくなったかに見えましたが、有志が開発しているフラッシュエミュレーター『Ruffle』により再生できるようになっていました! 感謝!!
既存のページで遊ぶだけなら、ブラウザにRuffleのプラグインを入れればOKです。
RuffleのCDNのタグを追加するだけで、とても簡単に設置・再生できました。
これで個人サイト復権の流れが来ても大丈夫……かもしれない。
2025/08/28追記:b2.swfを古いバージョン(1.08d)にしたら音が出ました。
2025/09/23追記:Ruffleで音が出ない原因と、力技で回避してみた方法について追記しました。
目次
既知の問題
音が出ないです……。
Nitro(Flash再生に特化したブラウザ・開発終了)では問題なく音入りで動作しました。検索したら「RuffleでB2を再生できたけどサウンドが鳴らなかった」という旨の掲示板の書き込みがあったので、自分の環境だけではないようです。
特別なブラウザでしか見れない状態より、無音でも安定して再生できる方がいい……のかは分かりませんが、常に最新版になるRuffleのCDNを使っていればそのうち対応するのではという期待があるので、なるべくRuffleを使いたいなと思います。日々着々と更新されているので!
この問題はいくつかの回避方法があり、アイテムラベルを全てショットとボムで埋めるか、古いバージョン(ver.1.08d)を使うことで音が出ることを確認しています。
B2とは?

アイソトニクス様が2002年から配布しているFlashブロック崩し制作ツールです。基本的に画像を2枚用意すればいいだけで、Flashの知識がなくても制作できます。
一部では俗に脱衣ブロック崩しなどと呼ばれて親しまれているようですが、健全なサイトアクセサリーとしても利用されていました。
準備
こちらのありがたい解説ページを見ながら作りました。
拡張エディター『鬼壁』サイトはリンク切れでした。残念……。2025/08追記:有識者の情報を基に、鬼壁掲示板のリンクからダウンロードできることを確認できました! 以下は標準エディタで進めていますが、拡張エディタのほうがおすすめです。

22年前のツールが動くなんてすごい。そもそも配布し続けて下さっていることがありがたいです。

これで必要なファイルが揃いました。簡単!
RuffleのCDN読み込み
Ruffle本体をサイトに設置するのではなく、CDNを使う方法で進めています。
CDNが読み込めない環境では再生できません。自分のサイトがない場合などは、GitHub Pagesを使う方法があるようです。b2.swf自体は無改造なら再配布可能なので、オープンリポジトリを作って公開するのが楽かもしれません(とはいえ初めてGitHubを使う場合はややハードルが高いです)。
ゲームページ(この例だとindex.html)の中身をメモ帳などで開き、以下のコードを<head>と</head>の中に記載します。(ゲームを読み込む前なら大体どこに記載しても良さそうです。)
<script src="https://unpkg.com/@ruffle-rs/ruffle"></script>
これで保存して完了です。B2フォルダを自分のサイトにアップロードし、index.htmlを開いて再生できるか確認します。
記載例はこちらのサイトを参考にしました。感謝感謝。
補足
以前はJavaScript形式のほうが安定だと思っていましたが、鬼壁エディタで作ったゲームページを編集して、CDNタグを1行足すだけのほうが安定して再生できそうです。以下はHTMLの部分例で、これをショートコードにしてWordpressで動かしています。
<div id="flashContent"></div> <!-- divのIDを指定 -->
<script src="https://unpkg.com/@ruffle-rs/ruffle"></script> <!-- Ruffleを読み込み -->
<OBJECT classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0" WIDTH="420" HEIGHT="695" id="B2" ALIGN="">
<PARAM NAME=movie VALUE="/game/B2/b2-8d.swf?cnf=/game/B2/config-108d-2.txt">
<PARAM NAME=quality VALUE=medium>
<PARAM NAME=bgcolor VALUE="#408080">
<EMBED src="/game/B2/b2-8d.swf?cnf=/game/B2/config-108d-2.txt" quality=medium bgcolor="#408080" WIDTH="420" HEIGHT="695" NAME="B2" ALIGN="" TYPE="application/x-shockwave-flash" PLUGINSPAGE="http://www.macromedia.com/go/getflashplayer">
</EMBED>
</OBJECT>
また、画像ファイルやテキストファイルはブラウザにキャッシュが残り続けやすいので、設定を変えたりした場合はブラウザのキャッシュを削除してから確認したほうがいいです。ChromやEdgeでは「閲覧履歴データを削除」などの名前で設定(Alt+F)から確認できます。
読み込みエラー

Ruffleもswfも読み込めているけど設定ファイルが読み込めていないエラー。設定ファイルをルートパスにすれば読み込めるかも。詳しいエラー内容はブラウザのコンソールから確認できます。
まあRuffleが普及していけば、有識者がちゃんと検証して初心者向けの記事を書いてくれることでしょう。よろしくお願いします。
テストプレイ
とりあえず再生できました。やったー!
しかしキーボード操作が反応しなかったり、玉がすり抜けたりしてしまいました。エディターに戻り、キーボード操作のチェックを外し、パドルを厚くし、速さをそれぞれ100%に変更したらかなり良くなった気がします。概ね問題なく遊べるようになりました。
その後公式サイトを見ながらアイテムをいくつか追加しました。コントロールがすごく強い……気がする……。その後イラストを差し替え、画面サイズを小さくしました。
音が出ない原因
b2.swf(ver.1.08e3)の内容を調べたところ、アクションスクリプトを数行削除すれば音が鳴ることが分かりました。Ruffleと相性が悪い箇所を特定できたのかもしれません。b2.swfは許可がない限り改変後の再配布は不可なので、原因箇所の確認に留めています。
問題になっていたと思しき箇所はこちら。太字が削除した箇所です。(アイテム音をdefaultから変更した場合、下のelse~も書き換えあるいは削除が必要なのでは。)
while(i <= maxItemNo)
{
_root.attachMovie("sound","itemSE" + i,i);
_root["itemSE" + i].sound = new Sound();
if(itemSE[i] == "default")
{
if(itemLabel[i] == "shot")
{
_root["itemSE" + i].sound.attachSound("shot");
_root["itemSE" + i].sound.setVolume(40);
}
else if(itemLabel[i] == "bomb")
{
_root["itemSE" + i].sound.attachSound("bomb");
_root["itemSE" + i].sound.setVolume(100);
}
else
{
_root["itemSE" + i].sound.loadSound(itemSE[i],false);
_root["itemSE" + i].sound.setVolume(itemSEVol[i] * 1);
}
}
else
{
_root["itemSE" + i].sound.loadSound(itemSE[i],false);
_root["itemSE" + i].sound.setVolume(itemSEVol[i] * 1);
}
i++;
}
アイテム音を定義しているスクリプトの一部です。loadSoundがRuffle上でエラーになり、スクリプト全体が停止してしまっている可能性があります。ショットとボム以外のアイテム音はそもそも鳴らない仕様だと思いますが、その処理がここでエラーになった感じでしょうか。
汎用音は MovieClip に紐付けて生成されるため安全。アイテム音は空の Sound オブジェクトなので不安定、とのこと。スクリプト内でmaxItemNo = 10;と定義されているので、config.txtでアイテムを出さない設定にしてもループ実行されます。現時点での根本的な解決には、b2.swfかRuffleの改造が必要になりそうです。
AI曰く、『従来のFlashのエラーを無視する形式は、セキュリティ的にRuffleでは厳しい』ので、今後解決するかは難しいところだと思います。Ruffleを自力でカスタムするか、b2.swfの改造許可をもらうか……。新規でブロック崩しを作ったほうが早いです……。
音が出ないエラー回避策(アイテムラベルを埋める)
上記の問題部分を回避するべく、config.txtのアイテムラベル11個をすべてショットとボムで埋めたところ、音が出ることを確認しました。ショットとボムしかアイテムを出せなくなりますが……。具体的にはアイテムの記述を下記のようにしました。(#3以降は出現率0です。)
&item=#1,shot,0.5,10,100,default,100,15,#2,bomb,1,1,50,default,100,100,100,200,#3,bomb,0,1,50,default,100,100,100,200,#4,bomb,0,1,50,default,100,100,100,200,#5,bomb,0,1,50,default,100,100,100,200,#6,bomb,0,1,50,default,100,100,100,200,#7,bomb,0,1,50,default,100,100,100,200,#8,bomb,0,1,50,default,100,100,100,200,#9,bomb,0,1,50,default,100,100,100,200,#10,bomb,0,1,50,default,100,100,100,200,#11,bomb,0,1,50,default,100,100,100,200,
改造は不要でconfig.txtの書き換えだけで済むので、アイテムにこだわらなければこれで十分かもしれません。Ruffleが対応したらアイテムを追加してもいいですし。こういう方法もあったということで……。
音が出ないエラー回避策(古いバージョンver.1.08dを使う)
暫定的な処置として、b2.swfを最新バージョンではなく古いバージョン(1.08d)に変更することで効果音が鳴るようになりました。
設定ファイルのフォーマットが若干異なり、アイテムが出なくなってしまったので少し書き換えました。過去のB2.swf(1.08d)に対応した設定ファイル(config.txt)例です。
version=B2&graphicWidth=420&graphicHeight=638&graphic1=/game/B2/1.jpg&graphic2=/game/B2/2.jpg&soundMode=true&soundBgmVol=30&minRadian=2&maxRadian=8&ballSize=15&baseSpeed=16&ballColor=white&xSpeed=10&barWidth=120&barHeight=20&criticalWidth=15&edgeWidth=25&blockWidth=25&blockHeight=25&barSpace=0&blockMask=2&life=5&barRapid=true&clearBlocks=p93&clearJump=clear&scoreBlock1=10&scoreBlock2=20&scoreBlock3=30&scoreBlock4=0&scoreBlock5=10&scoreBlock6=10&scoreBlock7=0&scoreSmash=100&scoreTime0=5000&scoreTime1=10&scoreLife=300&scoreCombo=20&scoreCombonum=5&ballSpeedRate=1&barSpeedRate=1&keyboardMode=false&blockMode=false&effectMode=true&liteMode=true&edgeBack=true&itemfromBlock=true&itemPercent=10&itemCtrl=1&itemWide=1&itemShort=1&itemRapid=0&itemGrav=0&itemPanic=0&weaponGaugeMaxBoost=600&weaponGaugeMaxCtrl=100&weaponGaugeMaxWide=300&weaponGaugeMaxShort=300&weaponGaugeMaxRapid=20&weaponGaugeMaxGrav=400&weaponGaugeMaxPanic=300&weaponValueBoost=3&weaponValueCtrl=3&weaponValueWide=1.5&weaponValueShort=0.6&weaponValueRapid=2&weaponValueGrav=15&timerVisible=false&rankingEnable=false&rankingTxt=hiscore.txt&defaultName=B2&block=0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,1,2,2,2,2,1,1,1,1,0,0,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,0,0,1,1,1,1,1,1,1,2,2,2,2,2,1,1,0,0,0,1,1,1,1,1,1,1,2,2,1,1,1,1,1,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,&command=&bgcolorGame=0c0c0c&bgcolorHtml=0&title=title&config=config.txt&quality=medium&commentTable=none&
すべての項目の検証はしておらず、とりあえず動いたのをそのまま貼っています。
この記述だとブロックから10%の確率で、コントロール・ワイド・ショートが1:1:1の割合で出るようになっています。多分。weaponGaugeなどは何も書かなければデフォルトが適用されると思います。
以前のバージョンも配布し続けてくださっていて助かりました。その後の更新はアイテム追加と挙動の修正なので、あまり問題はなさそうです。
紆余曲折の日記は別の記事に書きました。
それにしてもこんなに検証を重ねることになるとは思いませんでした(ほぼAIと問答した結果ですが)。
おわりに
この記事をほとんど書き終わってからB2ブロック崩しとRuffleについて調べたところ、2023年の3月にRuffleのアップデートにより再生が可能になったとのこと。サウンド関係の解決もそう遠くないのでは。
世の中にはまだRuffleの存在を知らず、「Flashは終わった」と思っている人が多いと思います。Flash終わってなかった!の驚きを共有したいものです。
前回のRuffleを使ってみた記事はこちら↓






















