karu_gamo

ゲーム作ったりドット絵を描く人です。現行機向けはそろそろ引退ムード。レトロハード向けゲ…

karu_gamo

ゲーム作ったりドット絵を描く人です。現行機向けはそろそろ引退ムード。レトロハード向けゲームがメインになりそうな雰囲気。 https://twitter.com/Karu_gamo

最近の記事

メガドラ開発:MDSDRVについて(2)

 SGDKによるゲーム開発において鬼門であるサウンド周りについて記事を書いてきました。今回はMDSDRVを実際に使う上で自分がわかりにくいと感じたチャンネルとスロットについてまとめてみました。 チャンネルとスロット  MDSDRVはPCMを同時に3音まで鳴らすことができるそうです。その場合はMML上でPCMのチャンネルをF、K、Lの3種を指定します(FはBGMと共有、Lチャンネルを使う場合はPCMMODE3を指定する必要がある)。このチャンネルというのはMMLを記述するう

    • メガドラ開発:SGDKメモ

      大したことではないけど、メモとして残しておきたいことがたまってきたのでまとめておきます。 リソーステーブル  ゲームを開発する際には様々なリソースを使用します。SGDKではリソースをresフォルダ以下にまとめ、.resファイルにコンバートの仕方を記述していきます。記述方法についてはbin/rescomp.txtを参考にします。ロムのサイズがそれほど大きくない場合は問題ないのですが、大容量ロムとなるとバンク切り替えを行ってリソースを管理する必要があります。その際には、リソー

      • メガドラ開発:スクロールの種類

         メガドライブには様々なスクロール方式があります。それぞれに一長一短があり、理解したうえで工夫すれば効果的な演出が可能です。他のハードでラスタースクロールを行う場合はHBlankで割り込みを発生させる必要がありますが、メガドライブはハードウェアで実装されているため、データテーブルをセットするだけ実現できます。これは使わない手はありません。今回は動画も交えてスクロール方式の違いやクセを見ていきたいと思います。 スクロールの種類  まずは横スクロールの種類です。以下の3種類が

        • メガドラ開発:VRAMについて

           メガドライブは今のハードに比べるといろんな面で非力です。開発に際してはCPU・メモリ・VRAM・ロム容量のそれぞれのリソースを上手に使っていく必要があります。この中では、ロム容量については当時とは事情が異なるため余裕があると言えます。メモリもゲーム内容によっては64KByteで充分でしょう。問題はCPUとVRAMです。というわけで、今回はメガドラ開発でとても重要になるVRAMについてまとめてみたいと思います。 VRAMの用途について  メガドラのVRAMは64KByte

        メガドラ開発:MDSDRVについて(2)

          メガドラ開発:LUAを使う

           私はメガドラゲームの開発ではBizHawk(EmuHawkって書いてあるときもあるんですがどっちなんでしょうね?)を主につかっています。BizHawkではLuaが使えますので、デバッグで利用していくと便利そうです。最近使い始めたので、メモ程度に情報を残しておきます。 使い方はメインメニューからTools/Lua Consoleを選びます。  基本的にはあらかじめLuaスクリプトを書いておいて、このウィンドウで実行することになります。とりあえず簡単なLuaスクリプトを書い

          メガドラ開発:LUAを使う

          メガドラ開発:MDSDRVについて

           前回、SGDKで使用できるサウンドドライバとしてMDSDRVを紹介しました。今回はMDSDRVをSGDKで使用する流れを書きたいと思います。 ダウンロードする MDSDRVのGitHubから最新版をダウンロードしてください。  とりあえず適当に解凍してください。MDSDRV-masterフォルダを開くと、いろいろ入ってますね。  dataフォルダ以下は自身のゲームで使用したいBGMやSEのためのMML、及びPCMを配置するためのフォルダです。  とりあえずはサンプル

          メガドラ開発:MDSDRVについて

          メガドラ開発:サウンド(SGDK)

           メガドラ向けゲーム開発の壁はやはりサウンド関連でしょう。まず前提として、この世代のゲーム機ではサウンドを制御するプログラム(サウンドドライバ)が標準で提供されていないため、ゲームごとにサウンドドライバを用意する必要がありました。ゲームプログラムとサウンドプログラムは全く畑が違いますので、さぁゲームを作ろうと思い立った人にとって突然サウンドの専門用語と向き合えと言われても戸惑ってしまいます。ポルタメントとか言われてもお菓子の名前かと思ってしまいます。思いました。そんなわけでS

          メガドラ開発:サウンド(SGDK)

          メガドラ開発:大容量のゲーム開発

           最近はメガドラゲームの開発を趣味と仕事で平行しており、いろいろと知識もたまってきました。SGDKによってメガドラのゲーム開発がC言語で充分な速度が得られるようになり、もっとも手軽なレトロゲーム機の開発環境となったのではないかと考えています。  一方で簡単なゲーム開発には十分でも規模が大きくなると理解しなければならない項目が増えるものの、古いハードゆえの情報不足や、エミュレータの機能をフル活用しないと問題の特定が難しくなっていきます。HowTo情報はいくつかネット上でも見られ

          メガドラ開発:大容量のゲーム開発

          ファミコン開発:バンク切り替え中にIRQやNMIが発生する可能性

           mmc3のバンク切り替えは$8000にバンク種類(プログラムか、キャラバンク、又そのアドレスを含めた種類)を設定し、その後にバンク番号を指定します。その最中にIRQやNMIが発生し、しかも割り込み先で$8000の内容が書き換えられてしまうと…戻ってきたときに意図しないバンクを切り替えてしまうことになります。具体的には以下のようなケースです。 lda #$06 ; prg80sta $8000 ; バンクの種類をセット;-- ここでIRQ発生。$8000の内容が書き換えられ

          ファミコン開発:バンク切り替え中にIRQやNMIが発生する可能性

          ファミコン開発:スクロールとPPUレジスタ

           ファミコンのスクロール機能とその応用で必要になるPPUレジスタについてまとめたいと思います。ファミコンのスクロール機能はシンプルな使い方をしている限りは簡単ですが、ちょっと工夫すると途端に?がたくさん出てきます。初めのうちはプログラムではよくあるおまじないのように、型として覚えておけば十分なのですが、複雑なことをしようとするとやはり深い理解が必要となるでしょう。つまり、今の私がそんな状態なわけです…。記事のほとんどは既存のファミコン開発関連ページ(主にNESdev)で得た知

          ファミコン開発:スクロールとPPUレジスタ

          ドラゴンクエストとドラゴンウォーリアー

           先日、海外版のドラクエであるドラゴンウォーリアー1~4をプレイしました。始めるまでは、海外版はデモが追加されていたり、1と2ではバックアップメモリーのおかげで復活の呪文がなくなっている、などの良い点のみを知っていたのですが、実際にプレイしながら海外プレイヤーの声を聞いているうちに、ドラクエの国内外での認識の差や、様々な問題を知ることができました。細かいデータなどは不明点も多く、憶測も混ざっていますのであまり信じすぎず、一人の感想程度に受け止めていただければと思います。 ド

          ドラゴンクエストとドラゴンウォーリアー

          最近書いたファミコンゲーム用スクリプト

          ドラクエ3,4およびゼビウスのMesen用スクリプトを最近書いたので残しておきます。Mesenはファミコンエミュレーターでとても機能が豊富なステキなエミュレーターです。 ■ドラゴンクエスト3ドラクエ3用のスクリプトはオートガードスクリプトです。ご存知の方も多いでしょうが、ファミコン版ドラクエ3は戦闘時にガードを選択するとガードフラグが立ちますが、コマンドをキャンセルしてもこのフラグは立ちっぱなしとなってしまいます。そのため、ガードしたまま攻撃や呪文といった、別の行動がとれま

          最近書いたファミコンゲーム用スクリプト

          ファミコン開発:OAMの破損問題

          今回の内容について、私も正確に理解しているわけではないので、メモ書き程度とみて参考にしてください。 どのような現象かというと、OAM(Object Attribute Memory。要するにスプライト情報を格納する専用のメモリです。通常、メインメモリ内に一時的なスプライト情報を持ち、DMAでOAMへデータを転送します)に長時間アクセスがないと(または書き込みがないと?)、データが破損する可能性があるそうです。この現象はNESの特定のリビジョンでは特に速く起きるということもあ

          ファミコン開発:OAMの破損問題

          0爆弾について

          0爆弾というのはスーパーマリオを始め、ファミコンで画面を上下に分割してるゲームではよく使われるテクニックです。具体的には、0番スプライトを画面分割したい位置に配置して$2002をリードし続けます。リードしたときにbit6が立っていたら0番スプライトを描画した瞬間、というわけです。 上の図は以前Tweetしたワルキューレの0爆弾についての説明です。 https://twitter.com/Karu_gamo/status/1357928328842289152 便利な0爆弾

          0爆弾について

          Mesenで使えるスクリプト。その他メモ

          昨日はいろんなゲームで使えるスクリプトを書いたので、今日は自分で作成しているゲーム用にスクリプトを書いています。気になった点についてメモを残しておきます。 色の指定方法。前回色は0xFFFFFFといった具合で指定しました。この場合は24bit指定で白ですね。32bitで半透明にするときは0x80FFFFFFという感じで頭にアルファ情報を書きます。この時アルファ値はFFだと完全に透明になります。普通は255で不透明が多いですが、24bit指定の時にアルファ値を書かなくても不透

          Mesenで使えるスクリプト。その他メモ

          Mesenで使えるスクリプト集

          前回はドルアーガの搭のライフやマトックの回数を表示するスクリプトを書きました。その後、他のゲーム用のスクリプトも書きましたので、まとめておきます。 【スターラスター:暗黒惑星表示スクリプト】 function starluster() is_battle_mode = emu.read( 0x41, emu.memType.cpu, false ) deathstar_x = emu.read( 0x053D, emu.memType.cpu, false )

          Mesenで使えるスクリプト集