cc65でファミコンゲーム開発
ブログ更新何年ぶりよ? というかXNAはどうなったんだ?とか。まぁ、そういうのは置いておいて。
そう、cc65ですよ! いまやファミコンゲームがC言語で書ける時代になったわけです。すごい時代になったもんですよね。そんな話を知人としていたわけですが、なんかいろいろあって結局自分も始めちゃいましてね、やっぱ面白いんですよ。ちまちまと作っていくのが。感覚的には片手で持てる程度のメモ帳にちまちまと細かい絵を描いてるような。そんな気分でゲーム作りしている印象です。今のゲームだと大量の石とかセメントとかドーンっと積んで、自社製のユンボ(ゲームエンジン)とかででかい建造物作るぞ~みたいな? それもすごいエキサイティングなことなんだけどね。こういう小さい環境のゲーム開発ってのも面白いです。
あ、また話が長くなってくる気配ですね。戻しましょう。cc65へ。
cc65は6502のCコンパイラなんですね。これとNES用のライブラリがあれば、ファミコン用のイメージが自分で作れちゃうってわけです。イメージっていうのは、いわゆるエミュ用のイメージである.nes形式ですね。これがフリーで提供されてるなんて素敵すぎです。ちなみに、出来上がったイメージファイルを実機で動作させる方法もいろいろあって、EPROMに焼いてカセットのロムを差し替える以外にも、PCからUSB転送すれば即ファミコンで動作しちゃうようなお手軽な方法もあるようです。
で、具体的な環境構築とかは説明が面倒というか、理解が半分にも及んでいないのでやめておきます。ググってサンプルとか探した方がよっぽど早いし、正確です。このブログに正確な情報を求める方が危険です!
というわけで、実際に始めてみて思うのは、本業でやったまもって騎士のときにも感じてましたが、画面をデザインすることとゲームをデザインすることが密接なんですよね。背景は全て8x8ドット刻みですし、パレットは16x16ドット単位。半透明もないので、画面にいれられる情報量にもおのずと限界がある。パレットの数もBGが4つにスプライトが4つ。それぞれ3色。+背景色に使えるのは1色のみ。これだけで画面デザインはかなり絞られてしまうので、やりたいことと、画面デザインを検討すると、自然にゲームシステムも固まってきてしまう。例えば、アイテムはどうで、武器はどんな感じにしようか? 体力ゲージはどんな風に表現しようか?とか。そういった要素は、上記の制限と処理速度を考えると、大して選択肢がない。もうこれしかやりようないよな…という具合に決まっていく。もちろん、そこから逸脱して独自性のある表現を考えるのも楽しいわけですが、やってみるとうまくいかなくて、四苦八苦したりと、まぁそういうのも含めて楽しいわけです。
んで、cc65を使うと処理速度が厳しい。遅いなんてもんじゃない! BGの書き換えなんて1フレームで5~7キャラが限界(アセンブリ言語でやればやり方次第で3ライン以上いけるらしいですよ!)。それでどうやってスクロールさせろっていうねん! と。なので、奇数フレームはこの処理をして、エフェクトは数フレームに1回更新すればいいか、とか、だんだん切なくなっていきます。で、しかも吐き出したコードがまたデカい! ファミコンのマッパー0だとプログラム領域が最大で32KBなんですが、ただでさえデカいコードなのであっという間に32KBを使い切っちゃう。なので、マッパー4辺りがよさそうです。プログラム、グラフィックがそれぞれ最大256KBですか? それだけあれば多少の贅沢は許されそうですが、同時に乗せられる容量は変わらないので、どっちにしても苦労することには変わらないです…。バンク切り替えは普通にCからでもできますし処理は速いです。BGの書き換えが重いので、大きな絵の変化はバンク切り替えが全てといっても過言ではないかもしれません。
さて、ブログ復活といっても何回続くのやらわかりませんが、最近見につけた知識を備忘録代わりに残しておきたいとは思います。そうなんです。最近はこんな感じで、ファミコンプログラムにハマってたわけですが、私のように技術の”ぎ”の字もないおっさんを見かねてか、いろいろと助けてくださる方もいるわけです。そんなノウハウを貯めつつゲーム作ってるのですが、そういった知識を独り占めというのも勿体無いので、自分で残せる範囲では残しておこうかと思います。
まずは1回目ということで駄文オンリーなんですが…。まぁ、次回からはもうちょい記事らしい記事を書こうかな?とか思ってます。しかし知れば知るほど、ファミコンってすごいハードだなぁ、と思います。仕様もスゴイけど、発売後の工夫? MMCやら拡張音源とか。あと驚いたのはファミコンは他のハードよりも音周りは優秀というのは聞いてたし、まもって騎士関連でもよくまぁこんな凝った曲できるよなぁ、とか思いながら仕事してたんですが、実際の仕様を見たら、え!? こんなショボい仕様であそこまでやってたの…!? と驚きが隠せないです。
で、今作ってるのは某グロブダ風な面クリ型固定画面シューティングです。グロブダのようなスピード感が出せればよいのですが、cc65ではちょ……っと厳しいですね。まぁファミコンなので、そこはファミコン風な方向性で勝負していきたいかなぁと思います。実はこれ最初マッパー0の32KB(スーパーマリオとかのロム)で作ってたんです。一応必要なデータと全部の画面は入れたので、後は作りこむだけかな?とか思っていたんですが、あのまもって騎士でサウンドドライバnsd.libをご提供いただきましたs.wさんにいろいろとご助言いただいて、調整されていく中でcc65でもmmc3いけるんじゃね?という展開になりまして、作り直しているところなんです。まぁ、マッパー0で完成させても良かったんですが、ガマンしてる箇所も多かったので、今度はちゃんと納得いくまで作れるかな? と思ってます。たぶん。

タイトル画面です。ゲームのタイトルは『硝煙の騎士デュランダル』っていいます。MMC3移行するにあたってタイトルシーンは変えようと思うので、たぶんこの画面は没になりそうです。残念!

メイン画面です。まんまですね! Bボタンを押しながら移動すると向き固定移動ができます。セレクトボタンでBボタンの機能を切り替えられて、パンチやミサイル、回復キットなどが使えます。

ステージ中の金塊を取るとステージ後にパワーアップできます。パワーアップすると、さらに次のパワーアップのために必要な、新しい価格に書き換えるのですが…これがキツい! 各桁の数字を計算するのに割り算とか余りとか求めたんですが、死ぬほど重くて…。そんな計算のために1フレーム抜いたりとかしてたら、今度はコードがでかくなる! もうね…どないせいゆうねん! と。結局シーンまるごと切り替える形にしちゃいましたよ…。ショップでパワーアップすると、自動的に店でて、また入る。すると値段変わってる。みたいな。ヒドすぎwここもバンク切り替えて絵を入れたいので、ずいぶん変わるだろうと思います。記念です。
さて、次回からは、cc65でゲーム制作する際の注意事項とかまとめてみたいと思います。あまりちゃんとした検証してないので、海外サイトに書いてあって、やってみたらなんとなく軽くなったような? というレベルです。あくまで自己責任で、ということで。
そう、cc65ですよ! いまやファミコンゲームがC言語で書ける時代になったわけです。すごい時代になったもんですよね。そんな話を知人としていたわけですが、なんかいろいろあって結局自分も始めちゃいましてね、やっぱ面白いんですよ。ちまちまと作っていくのが。感覚的には片手で持てる程度のメモ帳にちまちまと細かい絵を描いてるような。そんな気分でゲーム作りしている印象です。今のゲームだと大量の石とかセメントとかドーンっと積んで、自社製のユンボ(ゲームエンジン)とかででかい建造物作るぞ~みたいな? それもすごいエキサイティングなことなんだけどね。こういう小さい環境のゲーム開発ってのも面白いです。
あ、また話が長くなってくる気配ですね。戻しましょう。cc65へ。
cc65は6502のCコンパイラなんですね。これとNES用のライブラリがあれば、ファミコン用のイメージが自分で作れちゃうってわけです。イメージっていうのは、いわゆるエミュ用のイメージである.nes形式ですね。これがフリーで提供されてるなんて素敵すぎです。ちなみに、出来上がったイメージファイルを実機で動作させる方法もいろいろあって、EPROMに焼いてカセットのロムを差し替える以外にも、PCからUSB転送すれば即ファミコンで動作しちゃうようなお手軽な方法もあるようです。
で、具体的な環境構築とかは説明が面倒というか、理解が半分にも及んでいないのでやめておきます。ググってサンプルとか探した方がよっぽど早いし、正確です。このブログに正確な情報を求める方が危険です!
というわけで、実際に始めてみて思うのは、本業でやったまもって騎士のときにも感じてましたが、画面をデザインすることとゲームをデザインすることが密接なんですよね。背景は全て8x8ドット刻みですし、パレットは16x16ドット単位。半透明もないので、画面にいれられる情報量にもおのずと限界がある。パレットの数もBGが4つにスプライトが4つ。それぞれ3色。+背景色に使えるのは1色のみ。これだけで画面デザインはかなり絞られてしまうので、やりたいことと、画面デザインを検討すると、自然にゲームシステムも固まってきてしまう。例えば、アイテムはどうで、武器はどんな感じにしようか? 体力ゲージはどんな風に表現しようか?とか。そういった要素は、上記の制限と処理速度を考えると、大して選択肢がない。もうこれしかやりようないよな…という具合に決まっていく。もちろん、そこから逸脱して独自性のある表現を考えるのも楽しいわけですが、やってみるとうまくいかなくて、四苦八苦したりと、まぁそういうのも含めて楽しいわけです。
んで、cc65を使うと処理速度が厳しい。遅いなんてもんじゃない! BGの書き換えなんて1フレームで5~7キャラが限界(アセンブリ言語でやればやり方次第で3ライン以上いけるらしいですよ!)。それでどうやってスクロールさせろっていうねん! と。なので、奇数フレームはこの処理をして、エフェクトは数フレームに1回更新すればいいか、とか、だんだん切なくなっていきます。で、しかも吐き出したコードがまたデカい! ファミコンのマッパー0だとプログラム領域が最大で32KBなんですが、ただでさえデカいコードなのであっという間に32KBを使い切っちゃう。なので、マッパー4辺りがよさそうです。プログラム、グラフィックがそれぞれ最大256KBですか? それだけあれば多少の贅沢は許されそうですが、同時に乗せられる容量は変わらないので、どっちにしても苦労することには変わらないです…。バンク切り替えは普通にCからでもできますし処理は速いです。BGの書き換えが重いので、大きな絵の変化はバンク切り替えが全てといっても過言ではないかもしれません。
さて、ブログ復活といっても何回続くのやらわかりませんが、最近見につけた知識を備忘録代わりに残しておきたいとは思います。そうなんです。最近はこんな感じで、ファミコンプログラムにハマってたわけですが、私のように技術の”ぎ”の字もないおっさんを見かねてか、いろいろと助けてくださる方もいるわけです。そんなノウハウを貯めつつゲーム作ってるのですが、そういった知識を独り占めというのも勿体無いので、自分で残せる範囲では残しておこうかと思います。
まずは1回目ということで駄文オンリーなんですが…。まぁ、次回からはもうちょい記事らしい記事を書こうかな?とか思ってます。しかし知れば知るほど、ファミコンってすごいハードだなぁ、と思います。仕様もスゴイけど、発売後の工夫? MMCやら拡張音源とか。あと驚いたのはファミコンは他のハードよりも音周りは優秀というのは聞いてたし、まもって騎士関連でもよくまぁこんな凝った曲できるよなぁ、とか思いながら仕事してたんですが、実際の仕様を見たら、え!? こんなショボい仕様であそこまでやってたの…!? と驚きが隠せないです。
で、今作ってるのは某グロブダ風な面クリ型固定画面シューティングです。グロブダのようなスピード感が出せればよいのですが、cc65ではちょ……っと厳しいですね。まぁファミコンなので、そこはファミコン風な方向性で勝負していきたいかなぁと思います。実はこれ最初マッパー0の32KB(スーパーマリオとかのロム)で作ってたんです。一応必要なデータと全部の画面は入れたので、後は作りこむだけかな?とか思っていたんですが、あのまもって騎士でサウンドドライバnsd.libをご提供いただきましたs.wさんにいろいろとご助言いただいて、調整されていく中でcc65でもmmc3いけるんじゃね?という展開になりまして、作り直しているところなんです。まぁ、マッパー0で完成させても良かったんですが、ガマンしてる箇所も多かったので、今度はちゃんと納得いくまで作れるかな? と思ってます。たぶん。

タイトル画面です。ゲームのタイトルは『硝煙の騎士デュランダル』っていいます。MMC3移行するにあたってタイトルシーンは変えようと思うので、たぶんこの画面は没になりそうです。残念!

メイン画面です。まんまですね! Bボタンを押しながら移動すると向き固定移動ができます。セレクトボタンでBボタンの機能を切り替えられて、パンチやミサイル、回復キットなどが使えます。

ステージ中の金塊を取るとステージ後にパワーアップできます。パワーアップすると、さらに次のパワーアップのために必要な、新しい価格に書き換えるのですが…これがキツい! 各桁の数字を計算するのに割り算とか余りとか求めたんですが、死ぬほど重くて…。そんな計算のために1フレーム抜いたりとかしてたら、今度はコードがでかくなる! もうね…どないせいゆうねん! と。結局シーンまるごと切り替える形にしちゃいましたよ…。ショップでパワーアップすると、自動的に店でて、また入る。すると値段変わってる。みたいな。ヒドすぎwここもバンク切り替えて絵を入れたいので、ずいぶん変わるだろうと思います。記念です。
さて、次回からは、cc65でゲーム制作する際の注意事項とかまとめてみたいと思います。あまりちゃんとした検証してないので、海外サイトに書いてあって、やってみたらなんとなく軽くなったような? というレベルです。あくまで自己責任で、ということで。
スポンサーサイト
砂の塔
最近暑くなってきました。冬場は寒いこともあって公園で遊ぶ機会も少ないですが、夏も熱中症が怖くて遊べなかったりします。今日は雲と風があるせいで暑いといってもまだ遊びやすそうだったので、公園にいって砂遊びしてきました。娘が小さいうちは水を使った砂遊びは避けていたんですが(泥まみれになるので…)、大きくなると本格的な遊びができるようになってきて大人も一緒に楽しめます! というわけでバケツにシャベルを2つづつ持って出撃です。
今回の目標は高い塔を作ることです。ひたすら穴を掘り、水を注いで池を作り、やわらかくなった泥をその辺に盛っていきます。といっても水分を多く含んだ状態の泥はモロいので、すぐには使用せずある程度水気を抜いてから塔を作っていきます。地盤は固くしたいので、ある程度盛ってからシャベルで叩き固めていきます。固くなったらさらに盛り上げていきます。この作業をひたすら繰り返し、完成したのが下の画像の塔です。

最後の方は娘も帰りたくなってきたためややおざなりになりましたが、てっぺんには泥団子に顔まで描かれました。高さはだいたい50cmぐらいだったかな。
今回の目標は高い塔を作ることです。ひたすら穴を掘り、水を注いで池を作り、やわらかくなった泥をその辺に盛っていきます。といっても水分を多く含んだ状態の泥はモロいので、すぐには使用せずある程度水気を抜いてから塔を作っていきます。地盤は固くしたいので、ある程度盛ってからシャベルで叩き固めていきます。固くなったらさらに盛り上げていきます。この作業をひたすら繰り返し、完成したのが下の画像の塔です。

最後の方は娘も帰りたくなってきたためややおざなりになりましたが、てっぺんには泥団子に顔まで描かれました。高さはだいたい50cmぐらいだったかな。
世田谷線に久しぶりに乗った
気づいたら広告がでている!ということは1ヶ月更新してなかったようですね~。まもって騎士の方がなんとかリリースできて、いろいろとバタついている間に時間だけは過ぎてしまったようです…。むむぅ。
さて、この季節になると育児に関する手当てやらなんやらの現況届けを出すのですが、今回はちょっと訳あって戸籍謄本が必要になりました。しかし! 本籍を移してないおかげで世田谷区まで取りに行くことに…。もはや10年以上訪れたことのない小田急線豪徳寺駅を降り、世田谷線に乗ってみました。デザインが変わったのは前から知っていましたが、乗るのは20年ぶりぐらいかな…。高校の頃は友達の家に行くときによく乗ったもので、クーラーはなく前後の窓を開けて吹き抜ける風が心地よかったのを覚えています。床はカッコよく言えばフローリングですが、どちらかというと板敷きと呼びたくなる雰囲気に、ちょっと油っぽい黒い染みとツヤ。出発時のベルがチンチン鳴る事からチンチン電車と呼ばれていましたっけ。
新しい世田谷線は車掌が別室でなく、社内に繋がっているところは同じですが、全体的に近代的になり、なんとSuicaにまで対応しています。普通に小銭を用意しちゃいましたよ!
世田谷区役所で用を済ませ、豪徳寺まで徒歩。懐かしい家々と変わったところを確認しながら散策。豪徳寺では福室庵というお蕎麦屋さんがあります。私は蕎麦にうるさい方ではないのですが、蕎麦屋によっては『ちょっと勘弁!』と感じることが多々あります。私がそう感じるのも以前この福室庵さんでアルバイトをしていたからかもしれません。2~3年ほどではありますが、美味しい蕎麦をたくさん頂いたことが味音痴な私でもわかるほどに蕎麦の味を叩き込まれたのでしょう。また、蕎麦だけでなく、カツ丼もお勧めです。カリっとしたコロモに熱々のカツ! そしてうまいタヌキ蕎麦のセットは無敵メニューです。近くを通ることがありましたらぜひ一度食べてみてください!
さて、美味しいお店の他にもちょっとスゴイ店が豪徳寺にはあります。残念ながらストリートビューでは表示できませんでしたが、世田谷線山下駅付近にある1杯200円のラーメン屋さんです。(マクドナルドの裏、果物屋の前です)私が行った日は水曜で定休日とのことでしたが、他の日はやっているのでしょうか…。味の方については…カップ麺の方が美味しいかな?…という感じで、添え付けられた醤油やお酢で各自調整して楽しむのが基本です…。ハッキリ言うと味が薄かったです…。これも20年近く前の話しで、当時おじいちゃんとおばあちゃんが店をやっていたのですが、もはや味を確認もしていないのでは?という雰囲気でした。はたして今はどうなっているやら…。店先のメニューには今も200円のラーメンがあることから、変わることなくあのラーメンなんだろうなぁ。
この近辺には2つのゲームセンターがありましたが、どちらもなくなっていました。小さいゲームセンターでとても味のあるお店でした。行けば友達が誰かいる、そんな店でしたっけ。スト2が流行った頃にはキングオブドラゴンズにハマってて、それが『マカロニ~』の原点かもしれません。
さて、この季節になると育児に関する手当てやらなんやらの現況届けを出すのですが、今回はちょっと訳あって戸籍謄本が必要になりました。しかし! 本籍を移してないおかげで世田谷区まで取りに行くことに…。もはや10年以上訪れたことのない小田急線豪徳寺駅を降り、世田谷線に乗ってみました。デザインが変わったのは前から知っていましたが、乗るのは20年ぶりぐらいかな…。高校の頃は友達の家に行くときによく乗ったもので、クーラーはなく前後の窓を開けて吹き抜ける風が心地よかったのを覚えています。床はカッコよく言えばフローリングですが、どちらかというと板敷きと呼びたくなる雰囲気に、ちょっと油っぽい黒い染みとツヤ。出発時のベルがチンチン鳴る事からチンチン電車と呼ばれていましたっけ。
新しい世田谷線は車掌が別室でなく、社内に繋がっているところは同じですが、全体的に近代的になり、なんとSuicaにまで対応しています。普通に小銭を用意しちゃいましたよ!
世田谷区役所で用を済ませ、豪徳寺まで徒歩。懐かしい家々と変わったところを確認しながら散策。豪徳寺では福室庵というお蕎麦屋さんがあります。私は蕎麦にうるさい方ではないのですが、蕎麦屋によっては『ちょっと勘弁!』と感じることが多々あります。私がそう感じるのも以前この福室庵さんでアルバイトをしていたからかもしれません。2~3年ほどではありますが、美味しい蕎麦をたくさん頂いたことが味音痴な私でもわかるほどに蕎麦の味を叩き込まれたのでしょう。また、蕎麦だけでなく、カツ丼もお勧めです。カリっとしたコロモに熱々のカツ! そしてうまいタヌキ蕎麦のセットは無敵メニューです。近くを通ることがありましたらぜひ一度食べてみてください!
さて、美味しいお店の他にもちょっとスゴイ店が豪徳寺にはあります。残念ながらストリートビューでは表示できませんでしたが、世田谷線山下駅付近にある1杯200円のラーメン屋さんです。(マクドナルドの裏、果物屋の前です)私が行った日は水曜で定休日とのことでしたが、他の日はやっているのでしょうか…。味の方については…カップ麺の方が美味しいかな?…という感じで、添え付けられた醤油やお酢で各自調整して楽しむのが基本です…。ハッキリ言うと味が薄かったです…。これも20年近く前の話しで、当時おじいちゃんとおばあちゃんが店をやっていたのですが、もはや味を確認もしていないのでは?という雰囲気でした。はたして今はどうなっているやら…。店先のメニューには今も200円のラーメンがあることから、変わることなくあのラーメンなんだろうなぁ。
この近辺には2つのゲームセンターがありましたが、どちらもなくなっていました。小さいゲームセンターでとても味のあるお店でした。行けば友達が誰かいる、そんな店でしたっけ。スト2が流行った頃にはキングオブドラゴンズにハマってて、それが『マカロニ~』の原点かもしれません。
娘描いた絵本が面白すぎるのでうpしてみた。
最近娘がストーリー性のある絵本を描くようになってきたので、ちょくちょくチェックしていたのですが、その中でツボったものをスキャンして保存することにしました。ついでなのでブログで紹介しちゃいます。枚数が多くなってしまうのと、文字が細いこともあって読みにくいので最初と最後以外は画像にフォントで本文を書いておきました。