karu_gamo

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

karu_gamo

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

最近の記事

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

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

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

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

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

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

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

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

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

          ファミコン開発: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で使えるスクリプト集

          Mesenのスクリプトを使って、ドルアーガの搭にLIFEゲージを追加してみる

          ファミコンエミュレーターのMesenはとても高機能です。ファミコンゲームの開発でも助かる機能が豊富にあります。その一つであるスクリプト機能について説明します。以前よりLuaが使えることは知っていたのですが、面倒だったのでスルーしてたんですよね…。せっかくなので挑戦してみようと思います。 とりあえずタイトル通りに、『ドルアーガの搭』にLIFEゲージを追加してみようと思います(HPの方が短いし、今ではLIFEって書かないことが多い気もしますが、なんとなくLIFEの方が当時感があ

          Mesenのスクリプトを使って、ドルアーガの搭にLIFEゲージを追加してみる

          ファミコン開発:PAL対応・周波数

          PAL対応の話の続きです。ファミコンのCPUクロック周波数はNTSCとPALで異なります(NTSC:1.789MHz、PAL:1.662MHz)。音の周波数として設定する値は、CPUのクロック周波数から算出します。そのため、NTSCとPALでは設定する値が異なります。 各音階の周波数はこちらのサイトが参考になります。 <山田 泰司さんのページ> https://www.aihara.co.jp/~taiji/browser-security/js/equal_tempera

          ファミコン開発:PAL対応・周波数

          ファミコン開発:PAL対応(音楽)

          PAL対応するにあたってのメモ書きです。NTSCは60フレーム/秒ですが、PALだと50フレーム/秒らしいです。調べていくと他にもいろいろなこと書いてあって、何がなんやらサッパリなんですが…。 NESDEV:Cycle reference chart https://wiki.nesdev.com/w/index.php/Cycle_reference_chart 秒間50回更新ということは、毎フレーム1ドット進むキャラの場合…PALは1秒で50ドット進み、NTSCなら6

          ファミコン開発:PAL対応(音楽)

          ファミコン開発:引数

          Twitterで見かけた6502での引数について調べてみた。 それなりに重そうなのでメインループ内では使わなさそうだけど、メニューやRPGなどの処理負荷よりも効率を優先したいときには良さそうなのでメモを残しておく。 まず6502ではサブルーチンコールに引数は渡せない。よくやる方法としては、ZPなどに値を配置してサブルーチンをコールする。しかし、ZP内のどこに配置するか、自前でスタックのような管理を作るのか? といった問題もあってスマートな解決方法がない。 ”nesdev

          ファミコン開発:引数