Hello, my name is pornanime.

デジゲー博にスーパーファミコン用のゲームを出展するので全力で来てください

はい、えー

前々から作っていたスーパーファミコン用のゲームが、ひとまずゲームとしての体を成して展示できる程度になったので、秋葉原UDXで展示をしようと思います。11月4日、明日です。

デジゲー博 | 同人&インディーゲームオンリー展示・即売会

これです、スペース E-11a。40年もののテレビが置いてあるので一発で分かると思います。

f:id:gyuque:20181103163438j:plain

左に本物のスーファミ+テレビ、右にミニスーファミを配置してどちらも同じものを展示しています。
テレビの方は家だと結構きれいに映るんですけどね、なんか秋葉原は謎のFMラジオが飛んでいて、それに妨害されてかなり画面が汚いです。周りに金属のものを置くと電波を集めて?しまうようでなかなかデリケートです。

f:id:gyuque:20181103163954j:plain

あとフライヤーもあります。少ないので、多分すぐ無くなります。裁断って10枚ぐらい一気にいけるのかと思ったらなんと手動のやつは最大1〜2枚で、大変で……
pagam.es

なぜ「2人用F-ZERO」ができなかったのか

はい。
ああ、近所の通り魔は捕まったそうです。これで背後を警戒しなくてよくなりますね(尚、実際は数日で忘れて背後なんか見なくなってた)



さて、なぜかヨーロッパの人達はレトロゲームが大好きなようでTwitter等でよく反応をもらう(日本人より多い)のですが、その中で Mode 7 使わないの?使ってよ、と言われて、せっかくなので全機能制覇を目指してテストプログラムを作ってみました。
Mode 7 というのはF-ZEROパイロットウィングスみたいな……と言えばもう伝わったかと思いますが、巨大な一枚絵をグリグリ回すスーファミ独特の疑似3Dのことを指しています。(尚、下に書きましたが技術的には「画面モード7」の応用例として疑似3Dがあるだけで、疑似3DのことをMode 7と呼ぶのは俗称です)

↓結果としてはこんな感じに

実は「画面モード7」自体には3D機能は無く平面の変形機能を提供するだけで、遠近法を実現するためにはラインごとの変形操作を自分でやる必要があります。なので意外と面倒。

で、これを実際ゲームに使うかというと……うーん……まあデモで一瞬使うぐらいかな。



ところで、ミニスーファミ発売記念のインタビューでこんな話がありました

そもそも『F-ZERO』って、ものすごく長い直線を、時速400キロで走りきるというゲームですけど、2人で遊べるように画面を上下に2分割にすると、同じことをやるのは絶対に無理だ、ということがわかったんですね。

――ハードの制約上、どうしてもくねくね曲がったコースにせざるを得なかったんですね。
紺野 はい。そのような密集したコースを走らせられるのは、カートくらいしかない、ということになったんです。

https://topics.nintendo.co.jp/c/article/3228ce3a-8d29-11e7-8cda-063b7ac45a6d.html

読んだときは「へー」と流していましたが自分で実装したところ理由が分かってきました。

Mode 7のBGサイズはピクセル数で言うと1024×1024固定で、これより大きくも小さくもなりません。画面サイズの256×224と比べると結構大きいように見えますが、F-ZEROのようなスピード感を出そうとすると端から端まで一瞬で到達してしまいます。上のデモだと地面に白い金網がある所がBGの端なので、1秒程度で到達しています。ということは、何も考えずにF-ZEROを作ると1周が10秒もかからず終わる詐欺みたいなゲームになってしまいます。

実際のF-ZEROではどうしているかというと、コースの一部だけをVRAMにロードして、プレイヤーの動きに合わせてストリーミングするという手段で、1024×1024より広大なコースを実装しています。

f:id:gyuque:20180602030712p:plain

当然、ロードする範囲はプレーヤーの場所と1対1なので、プレーヤーが2人に増えるとBGが2枚要ります。しかしMode 7で使えるBGは唯の1枚だけ。ということで、マリオカートではストリーミングを諦めて

f:id:gyuque:20180602031127p:plain

単にコースを1枚に詰め込むという実装で、この点だけ見るとF-ZEROより退化しています。しかしここで「カートということにして車を遅くする」というアイデアを出してきて最終的にマリオカートにしてしまうのが任天堂のデザイナーの力でしょう。

ということでまあ、プロは流石やねという話です。



ちなみにテストプログラムはgithubに上げたので試したい方はどうぞ
https://github.com/gyuque/snes-m7/releases

スーファミ開発報告20180423

なんか近所で人が刺されましてね、背後をチラチラ確認しながら歩いています。でも視力が非常に悪く夜目がきかないのであんまり意味が無い。

さて、念願のBGMと効果音が付きました
スーパーファミコンの自作ゲームにサウンドを組み込んでもらった話 | ANIMATONE


事情を知らない人に、当時小さいメーカーから出てたタイトルだよ?とか言えば騙せそうな水準にはなってるかと思います。

できたらミニスーファミ2に入れてくれない?

で、ちょっと話が前後しますが、上のBGMが付く直前に豊井さん、ninoさんと久々の開発会議。猫にタックルをかますゲームを作っている後ろから、豊井さんが飼っている本物の猫(3匹おり、名前を1、2、3と云う)の声が聞こえてくる。
出た意見↓

  • 完全に機械のUFOに魚を与えているのはおかしくないか? 生物っぽいデザインにしたい
  • アイテムを集めるゲームなんだけど、作業的に押し付けてる感じがする。 アイテムを集めるのが楽しいと思える仕掛けを入れたい → マリオみたいなコインを配置するのはどうか
  • タコの名前は? → タコでいいんじゃないかな(ええ…)



まずUFOのデザインについては多分こんな感じ↓(変わるかもしれない)
f:id:gyuque:20180423035822j:plain
次にコインについては動画にある通り。コイン自体はBGに貼ればいいんだけど、取った時のエフェクトはちょっと面倒。Twitterでスプライト置くだけでしょ?とか言われたんだけど、いやまあ、CPUが3.58MHz(ギガじゃないよ)とかの世界だから、雑には作れないんだ。
f:id:gyuque:20180423025357g:plain
タイトルは……また考えとく

さて、検討中の事項は

  • 今考えているFail(ミス)の条件はタイムアップのみだけど、即死トゲとかあった方が難度の調整にいいか?
  • 今のところコインを取らなくてもクリアできるが、なるべく集めさせたい → エンディングの条件を「コインを集めてUFOを修理する」とかにする?

こんなところか。

夏ぐらいにはCIB(Cartridge, Instructions, Box)=カセット・取説・箱をやりたいかな。

スーファミ開発近況

相変わらず牛の歩みで……

f:id:gyuque:20180409143545p:plain f:id:gyuque:20180409143552p:plain f:id:gyuque:20180409143638p:plain f:id:gyuque:20180409143719p:plain f:id:gyuque:20180409143727p:plain f:id:gyuque:20180409143734p:plain

しかしゴールには近づいております。

https://snes-taco.tumblr.com/post/172721628148/testing-sound-effects

一番のネックだったサウンドドライバ(+MMLコンパイラ)がほぼ完成。上の動画はテスト用の効果音しか入れてませんが、BGMもデータを入れれば鳴る状態になっています。
あと残った課題は……タイトル! そう、タイトルがまだなんですね。せっかく2年ぐらい?かけて作ったプログラムなのでじっくり考えようと思います。

案出し用資料
f:id:gyuque:20180409210121p:plain
f:id:gyuque:20180409210130p:plain

フランス語でタコはプルプ? なんか可愛い感じで使いたいかも。 実際発音を聞くと絶対プルプとは言ってないんだけど、まあ固有名詞なので語感優先でいいかもしれない。

スーファミゲー製作状況2018

もう2月になりそうですが今年最初なので一応、明けましておめでとうございます。去年の年始(一昨年の年末)はインフルエンザに罹ってボロボロでしたが今年は穏やかに迎えることができました。でも今年の方が流行ってるんですねえ。
さて、これまでのスーカツ(スーファミ活動)ですが……

とりあえず勢いでSFCのプログラムを作る(実機版1号)
 ↓
内容が微妙なのでWindowsでプロトタイプを作ってゲーム内容を真面目に考える
 ↓
プロトタイプと同じ内容をSFC実機で実装(実機版2号)
 ↓
グラフィックの豊井さん、サウンドのNinoさんと初めて会って打ち合わせ、いろいろ要望が出たので大きく変更することに
 ↓
プロトタイプから作り直す
 ↓
SFC実機へ移植(実機版3号)[作業中]

という経緯があり、ここまで2年ぐらい? いやあ、時間が流れるのって速い速い。そして製作は遅い。でも、流石にもうちゃぶ台返しはナシと決めていますのでこれでいきます。調整はしても変更はしない。
実機版の実装はコア部分がだいたい出来て一安心というところまできました。


パフォーマンスの話

以前にも書きましたがスーファミのCPUは初代ファミコンに毛が生えた程度で、当時でも高性能とは言い難い物なので、処理落ちを気に掛ける必要があります。ということで性能を計測したくなるわけですが、ここで走査線の位置を見るという方法があります。

スーパースローでブラウン管テレビの写り方を撮影するとどんなふうに見えるのか? - GIGAZINE

えっ、画面をカメラで……というわけではなくて、プログラムの中で走査線の位置を取得できるのでそれをメモリに書き込んでおいて、エミュレータのデバッガで見るという話です。当時のゲームは走査線を使ったトリックを実装していることが多いので、エミュレータはこのへんもしっかり再現しているわけです。

走査線のカウンタは以下のようなサイクルになっていて……

f:id:gyuque:20180129003555p:plain

0xE0 : VBLANK開始、走査線が画面の下端に到達して描画が終わる
 ↓  (この間はハード側の描画処理が休むので、VRAMに書き込めるようになる)
0xFF
 ↓ (オーバーフローして0に戻る)
0x00 : VBLANK終了、走査線が画面の上端に現れ次フレームの描画が始まる
 ↓  (この間はVRAMに書き込めないので当たり判定等のCPUだけでできる処理を行う)
0xE0 : 次のVBLANK開始、ここまでに当たり判定等の処理が終わっていないと処理落ちになる

…なので、処理が終わった時点でのカウンタ値が0xE0に迫ってきたらアルゴリズムかゲーム内容を見直さないといけないということになります。

実際に計測してみると、まず敵(ネコ)を1体も置かないときは……
f:id:gyuque:20180129005726p:plain
0x04程度。余裕ですね。続いて、3体投入すると……
f:id:gyuque:20180129005821p:plain
0x32程度。さらに、5体まで増やすと……
f:id:gyuque:20180129005901p:plain
0x4C程度。まだまだいける?と思いそうなんですが、ここで考えなければいけないのは、プレイヤーがネコに体当たりして魚を落とさせた後、ネコが魚に触れると取り返されるルールがあること。つまり、ネコ(多)-魚(多)の当たり判定という結構重い処理が入るので、5体全部が魚を落とした状態を計測。
f:id:gyuque:20180129010237p:plain
0x9C~瞬間的に0xA2ぐらい。だいぶ重くなりました。ということで余裕を見て5体がMAXという仕様にしておきました。プロトタイプ版は4体でテストプレイをしていたので、5体も出せれば目標以上ってことで。



という感じで牛歩のように、しかし確実に作っていますんで、今年こそは完成目指してやっていきましょう。
そういえば最近、ビックやらヨドバシに行くと立派なレトロゲーコーナーがあるじゃないですか。あるんですよ。といっても中古カセットは流石に無くて、互換機とか8BIT MUSIC POWERとかが置いてあるんですが、8BIT MUSIC POWERがOKってことはこれもいけそうじゃないですか。あそこに置くのを今年の目標としましょう。

製作状況

screencast

豊井さんから4部構成にしたいなーという提案を受ける

  • 田舎
  • 田舎と都会の中間 → 河川敷
  • 都会
  • 宇宙?

(時間順になっていて、田舎ステージ=昼間から始まって都会ステージで夜になる)

  • タコの女の子は火星人
  • 火星にいる男の子に魚をプレゼントする為に魚を集めることが目的

(前は月から来たって聞いたような気がするけどまあいいか)

それで前景(プレイヤーが乗れる部分)はプログラムの仕様に合わせて作る必要があり難しいので、じゃあこれはこちらで作るので、豊井さんには後ろ(遠景)をお願いしようかな、みたいな状況になっている。ただ後ろも一枚絵をベタっと貼れるわけじゃなくてパーツに分解しないといけないんだけど。

とりあえず宇宙以外はイメージを作ってみたけど、宇宙が難しいな。

▼「田舎」試作版:前からずっと使ってるやつ
f:id:gyuque:20171202013659p:plain
▼「河川敷」試作版:鉄製コンテナと古タイヤの山、トランスファークレーン。廃棄場みたいなイメージ
f:id:gyuque:20171202013601p:plain
▼「都市」試作版:建設中のビル
f:id:gyuque:20171202013625p:plain
(現在の背景は仮の物)



ちなみに、地形のオブジェクトは一応各パーツを描くときに理屈を考えている。別に機械や建築物の知識なんて一切無いので素人の妄想なんだけど、こうすると細部に描き込む物が思い浮かんでくる。

f:id:gyuque:20171202014625p:plain
f:id:gyuque:20171202014636p:plain

コンテナばっかりだな。箱が大人気。

ミニスーファミが届いた

f:id:gyuque:20171011143701p:plain
ナナチが……
ではなくて、Amazonの予約分を押さえた知人に譲っていただいた次第です。圧倒的感謝。

書き換える

さて、一般メディアにも出ているので堂々と書くが、ミニファミコンミニスーファミの中身はhakchi2というツールで書き換え、元から入っているソフト以外で遊ぶことができる。

https://github.com/ClusterM/hakchi2/releases

hakchi2自体は去年のミニファミコンの頃から改良され続けているので洗練されており、本当に簡単に使える。

と思ったら、PCを再起動した後でPCがミニスーファミを認識しなくなってしまった(別のポートに差し直したら復活)。2017年になってもUSBというやつは心霊現象が起きる。

ちなみに、hakchi2にはおまけでスクリーンショットを撮る機能がある。テアリングを起こすのであまり実用的ではないんだけど、こういう不安定な時にちゃんと認識されているかの確認に使える。まずスクリーンショットを撮ってみて、成功したら書き込みに入るのが良いと思う。 書き込みに入ってから中断するのは怖すぎるので。

早速、手持ちのソフトを投入してみた。もちろん自分で吸い出したやつですよ。こんな名前のブログですが法令遵守でお送りしております。

f:id:gyuque:20171011135859j:plain

開発者によると「75%程度動く」とのことで、任天堂純正エミュレータにしては意外と低い。まあそれでもスーファミソフトの母数を考えると相当な本数が遊べるわけだ(持ってれば、の話ね)

↓動作確認リスト ※Retrodeで吸い出せないソフト(他のエミュレータでも起動しない)は除く

手持ちのソフトは結構打率が良かった。起動さえしてしまえばリプレイや状態セーブもしっかり動く。自作ソフトも起動しているので「基本的には何でも動く」ことが分かる。何らかの地雷を踏むと例外的に動かなくなると。その例外が「ぷよぷよ通」なのは本当に悲しいが……
ちなみに、hakchi2では最後の手段として「エミュレータごと入れ替える」を提示しているが、うーん、そこまでやるならRaspberry Piで動かすかな……

追記
ブコメで情報をいただきました

す~ぱ~ぷよぷよ通はバイナリエディタで半角カタカナタイトルを他の文字に置き換えると動く可能性あり、メニュータイトルの日本語フォントは自分のblogで上げている

http://b.hatena.ne.jp/entry/346097370/comment/BCC

見事動きました。感謝……
ということで、吸い出せた分に関しては100%になりました。

ああちなみに、書き換える場所はヘッダです。なんじゃそらという方は自作ゲーム(homebrew)や改造(hackrom)関連の情報を漁ってください。

追記2

新しいhakchi2(v2.21b)でこの問題の対処らしきパッチが入ったのですが、ミニスーファミが文鎮になりました ……という時のためにファームウェアのバックアップを取る機能(dump kernel)があるので、絶対に取っておいて下さい。

f:id:gyuque:20171012010548p:plain

f:id:gyuque:20171011041559p:plain

f:id:gyuque:20171011041503p:plain

f:id:gyuque:20171011041458p:plain

↓ ゲームの動作自体は全く問題ないが、元からあるソフト含めて日本語のタイトルがおかしくなってしまった。聖剣がただの剣に。

f:id:gyuque:20171011041533p:plain

↓ ちなみに自作ソフトの様子はこちら

f:id:gyuque:20171011141023j:plain f:id:gyuque:20171011141038j:plain

世界広しといえどもミニスーファミで自作ソフトを動かしている奴は……結構いそうだな。世界は広いので。