Hello, my name is pornanime.

はい

今月、作曲のninoさんがお忙しいということで、その間にゲーム本体のほうを見直していた。

具体的に言うと、ラン系ゲームならプログラムが極限まで単純になるかなと思ったら意外とややこしくなってしまったし、その割に大して面白くねえなと思ってゲームデザインからやり直すことにした。

エターナってないか、元気でいるか、街には慣れたか。
まあとりあえずアイデアはまとまりました。

f:id:gyuque:20160820010041g:plain f:id:gyuque:20160821010207g:plain

こんな感じで魚を盗みに来る猫を退治するゲームに。
尚、これはスーファミで動くプログラムではなくて、Windows向けにCで書いたプロトタイプ。ただし、グラフィックやプログラムのロジック等、スーファミ実機で実現できる見込みのものしか使わないという縛りを入れてあるので、スッと移植できる……筈。多分。ただ、猫4匹を同時に動かして処理落ちしないかどうかは微妙なラインではある。(以前の2匹で限界だったプログラムに比べるとだいぶロジックが簡略化されてはいる)

qSPC進捗


↑ qSPCの開発に協力いただいているyouninomiyaさんのサンプル曲

今回強化したポイントは

  • パンポット(左右への振り分け)
  • ドライバの64KB化

ドライバの64KB化というのは、今まではデータも含めて32KBが上限で、SPCが持っている64KBのメモリを使い切っていなかったということ。SFCの仕様上、CPUからROMの中が32KBずつしか見えないので、64KBのドライバイメージは2回に分けてSPCに転送しなくてはいけない、という面倒があってこうなっていました。

実在のスーファミソフトの曲だと言って騙せるぐらいの水準には達したのではないかと思いますが、LFOが無いのが弱点かな。あとはMIDIのドラムトラックみたいな機能を付けるかどうか(今でも一音ごとに音色を切り替えればドラムセットを鳴らせるけど、切替命令が大量に入るのでスコアデータが肥大化する)

進捗

音色切替を実装。楽譜の再現という面では最低限機能が揃ったか。ただ、これだとモノラルなのでパンポットが必要かな。

ところでTwitter以外から来た人は何をやってるのか分からないと思うので改めて説明しておくと

  1. スーパーファミコンの音源チップ(SPC700)用ドライバ
  2. (1)を埋め込んだSPCファイルとSMCファイルを生成するMMLコンパイラ

を作ろうという話です。

f:id:gyuque:20160601023621p:plain

今回使ったMML

http://dic.nicovideo.jp/b/a/%E3%83%AD%E3%83%83%E3%82%AF%E3%83%9E%E3%83%B3/331-#343 より

#INST 0={0, 15, 7, 4, 18}
#INST 1={2, 15, 2, 2, 7}

$HI=v3o7 q15;
$SN=v9o4 q15;
$SNi=v9o5 q7;


t150

o4 l16 v7 @0
/:4e4grbr<d8.c+8.>a8<c8.>b8.g8argredre
  ere8 ere8 ere8 ere8 /ere8f+rf+8grbrd4 :/
  ddrdrdrde   bbggeec 

/
  /: e8e8r8e8egrbrge8 e8e8r8e8egrbrge8 d8d8r8d8df+rarf+d8 e8e8r8e8egrbrge8:/
  /: grg8 grg8 grg8 grg8  f+rf+8 f+rf+8 frf8frf8 l8ref+egere 
     bbeeb+16b+16eee l16:/
;

o5 l16 q15 v15 @0
/:4 e4grbr<d8.c+8.>a8<c8.>b8.g8argredre
<r8f+f+f+grrf+f+f+gr4/ rrf+f+f+grbrbargrf+r>:/
<aarararab4r4>
/
l8 /:rebab4agabre2gf+rf+r/f+ede&e2 rega:/gaf+e&e2 regb
q16<d1c+2c2q15 >ge4.regaa+ba+baged @w25
q16<d1c+2c2q15 >ge4.regb<e>bbb<d+f+ab>
;

o5 l16 v6 @0
/:4 r8e4grbr<d8.c+8.>a8<c8.>b8.g8argredre
    <ddderrddder4/ rrdddergrgf+rerdr> :/
    <f+f+rf+rf+rf+g4r4>
/
  /:gargrgrgf+grf+rf+rf+ dererde8 dererde8
    gargrgagrgrf+rf+gf+ dererde8 dererde8:/
  /:q16b1a+2a2q15  l8rgagbgrgagbgrgf+g:/ l16
;

o2 l16 v15 @1

/:60 $SNi c $HI ccc :/ $SNi ccrcrcrcc cc  ccc cc
/
 /:8 $HI crrr $SN c8r $HI ccccr $SN c8rr :/
 /:  $HI crcrcrcrcrcr $SN c8r8 $HI crcr $SN c8r8 $HI crcr $SN c8r8
    /  $HI crcr $SN c8r8 $HI crcr $SN c8r8 $HI crcr $SN c8r8 $HI crcr $SN c8r8  :/
 /: $HI crcr $SN c8r8:/
 $HI crcrcrcr cc c8c8c8
;

qSPC現況

進歩としては

  • 曲全体のループをサポート
  • オクターブ相対指定(< >)の記号を入れ替えるオプションをサポート
  • タイ・スラーを実装
  • 1トラックあたり256バイト以上のスコアデータをサポート

といったところで、宣言通りコンパイルの曲を一つ。ちなみに今回は実機収録です。

自分で収録してきたドラムの音がいまいち使い物にならないので、これぐらいしか鳴らせる曲がありません。
あとはハドソンで、ボンバーキング

この曲はわりとピアノにばっちりハマる感じがする。そういえばこれ高橋名人が歌ってるバージョンがあるんですよね。怖くて聞いてませんが。
あとは音色関連を実装すれば機能的には最低限揃う感じです。ただ、他人に使わせるには、MMLのパースエラーをまともに表示するという地味な作業が残っています。

qSPC進捗

マクロ、繰り返し、移調、三連符……などなど。
盛り込んだ結果、この曲を演奏できるようになりました。

データは
ニコニコ大百科: 「ロックマン3 Dr.ワイリーの最期!?」について語るスレ 31番目から30個の書き込み - ニコニコ大百科
よりqSPC用に修正。

#TITLE ROCK3PASS

$i=q16v8l16o5ns1;
$a=rfrfereere;

t112 $i/:arcarc grcgrcfrcfrcgrcgrc /fra<crdrrdrrd8.rcr>a<c>eb-aeb-:/
<c>rfar<crr>far<c8.>{b-b+b-}argarefrg;

$i/:f.r.f.r.e.r.e.r. c.r.c.r. e.r.e.r.crfarfrrfrr/f8.$a:/frr$a;

v10ns6q10/:o3l8.cceeffggaaggffg8f16e8d16:/

次の目標はやっぱり、コンパイル系の曲をいっときたいですね。

MMLを書くとスーファミのROMが出てくるやつ(進捗)

アルファ版と名乗るのも図々しいぐらいの「最低限」ですが、smcとspcが出るようになりました。あとは

  • 音色:ADSRと楽器サンプルの組み合わせをMMLの中で定義、参照できるようにする
  • スコアデータ:1トラック256バイト固定なので延長できるようにする
  • マクロと制御:ループぐらいはできるようにする

ぐらいをクリアすれば、公開して遊んでいただけるかと思います。

(今気づいたんですが、ドライバにバグがあって音が全部半音下がっています。移調しているだけなのでそれっぽくは聞こえますが……)