mieki256's diary



2018/10/30(火) [n年前の日記]

#1 [tic80] ファミコン音源の波形について調べていたり

TIC-80は、音色の波形を描いて鳴らすことができる仕様だけど、せっかくだからファミコンっぽい音を出したいよなと。しかし、ファミコンってどういう波形が鳴らせたのか、そのへんよく知らないわけで。ということで、ちょっとググったり。

_8bit(ファミコン風)ゲーム音楽の作り方。仕様を理解し正しく打ち込みましょう。 ・ 直伝・サウンドクリエイターへの道
_ファミコン三角波: テキスケ
_Programmable Sound Generator - Wikipedia
_三角波とは?ファミコン風の音色を簡単に説明してみる動画 その4(DQ, FFの有名曲を具体例として) - ニコニコ動画
_NES on FPGA dev NSF
_サウンドクリエイターのお仕事!【第10回】 | ゲームガンバ
_チップチューンを作るための6つのTips - あっぷりノート
_中潟憲雄のファミコン音楽で表現する小技とは? | 三才ブックス
_PC-Engineの音楽は何故ショボいのか?についての考察。 - 超兄記。
_矩形波のデューティ比を変化させる - Kludge Factory
_ファミコン音源詳細 - MCK Wiki*

とりあえず分かったのは…。
ひとまず、TIC-80は4チャンネル鳴らせるらしいから…。ファミコン本体の音源っぽい音 ―― 矩形波 x 2 + 三角波 + ノイズ、であれば鳴らせそうだなと。DPCMは機能が入ってないから鳴らせないと思うけど。

ノコギリ波は向きで聞こえ方が違うのだろうかと想像したのだけれど、TIC-80上でそれぞれ波形を作って鳴らしてみても違いは分からなかった。右上に変化する波形でも、右下に変化する波形でも、どちらでもいいのかもしれない。

ディレイとディチューンってなんぞや。 :

関連記事を眺めていたら、ディレイとディチューンなるテクニックが昔は存在していたようで。どんな技だっけ…。当時は知ってたはずだけど、忘れてる…。

ディレイは、別チャンネルの音をほんのちょっとだけ遅らせて鳴らすことで、音の広がりを付加する技、だったらしい。1チャンネルでも似たようなことができたらしいけど具体的なやり方は分からなかった。

ディチューンは、おそらくピッチを少しずらして鳴らす技、なのかな…。自分の理解が間違ってるかもしれないけれど。

#2 [nitijyou] 日記をアップロード

気づいたら 2018/09/13 から日記をアップロードしてなかったので少しずつアップロード。

2018/10/29(月) [n年前の日記]

#1 [pc] BDFフォントについて調べていたり

TIC-80 で使われている以下のフォントを眺めているうちに、ビットマップフォントについて興味が湧いてきて。

_A very tiny, monospace, bitmap font

ビットマップフォントと言えばBDFフォントだろう、Windows上で BDFフォントを使う手段は無いのかなと、なんとなくググり始めたり。まあ、TTF に変換して使うという手はあるらしいのだけど…。

_how to use BDF fonts on Windows, convert to TTF with bdf2ttf

Windows上でBDFフォントを直接読んで画像に文字列を上書きしたりできるツールは無いのだろうかとググってみたもののこれが全く見つからず。それどころか、BDFフォントに対応したビューアの類すら見つからない。

まあ、GIMP ならBDFフォントも使えるっぽいので、それでどうにか、ということになるのだろうか。

今時は高解像度のディスプレイもそれなりに普及してるだろうし、フォントはアンチエイリアスをかけて表示するのが当たり前になってるところもあるから、PC上でビットマップフォントを使う場面なんてほとんどないだろうし、関連ツールがほぼ存在しないのも仕方ないか…。電子工作で、解像度の低い液晶上に表示する、といった場合は使えそうではあるけれど。

#2 [game] 2Dゲームのカメラ移動

たまたま何かの拍子に、2Dゲームのカメラ移動について、その種類を網羅した記事に遭遇。

_Gamasutra: Itay Keren's Blog - Scroll Back: The Theory and Practice of Cameras in Side-Scrollers

スクリーンショットを見ているだけでも楽しい…。

さておき、地面と設置した時だけy座標を合わせるやり方を知って「その手があったか…」と恥ずかしながら今頃目ウロコ。

こういうのって、二人同時プレイの仕様だと、更に面倒なことになるんだよな…。片方が踏み止まっている状態で、もう片方が先に行こうとしたらどうなるの、とか。先に行ってる側を優先して、後から来てる側をズリズリ引っ張るのか。それとも後から来てる側を優先して、先に行ってる側が進めないようにしちゃうのか。どれが正解なんだろうな…。

2018/10/28() [n年前の日記]

#1 [tic80] TIC-80でラスタースクロール処理その2

TIC-80 0.70.6 で、SCN() を使ってラスター単位というか走査線単位相当での処理を試しているところ。

走査線単位でアレコレできるなら、もしかして _アレ もできるのかな、と…。水面に見えるかもしれない系の画面効果を書いてみたり。

tic80_scn_hflip_ss01.gif

以下のページを開けば、ブラウザ上でも実行できる。

_rasterttest03.tic.html

念のために再度書いておくけど…。

ソース。 :

ソースは以下。
-- title:  game title
-- author: game developer
-- desc:   short description
-- script: lua

t=0
x=24
y=32
sy=0
PAL_ADDR=0x3FC0
SCR_OFST=0x3FF9

function TIC()
 local spd=2
 if btn(0) then y=y-spd end
 if btn(1) then y=y+spd end
 if btn(2) then x=x-spd end
 if btn(3) then x=x+spd end

 cls(0)
 map(0,0)
 spr(1+t%60//30*2,x,y,14,2,0,0,2,2)
 print("HELLO WORLD!",84,28)
 t=t+1
 sy=math.floor((136*0.7)+16*math.sin(math.rad(t)))

 -- reset palette 
 sync(1<<5)
end

function SCN(row)
 local dy=row-sy
 local rx,ry
 if dy<0 then
  rx=0
  ry=0
 else
  rx=1.5*math.cos(math.rad(4*t+55*dy))
  ry=-dy*2
 end
 poke(SCR_OFST,rx)
 poke(SCR_OFST+1,ry)
 
 if dy==0 then
  -- palette change
  for i=PAL_ADDR,PAL_ADDR+16*3-1 do
   poke(i,peek(i)*0.7)
  end
 end
end

走査線単位でのパレット値の書き換え。 :

今回は、水面部分が少し暗い色になるようにしてみたり。SCN() の中で、16色分のパレットを書き換えることで暗くしている。要は、 _メガドライブ版ソニックの水面処理 みたいな感じ。 *1

_RAM - nesbox/TIC-80 Wiki によると、パレット値は 0x3FC0 から 16色 x 3 Byte (RGB 24 bit) = 48byte として記録されている。その領域を _poke() で書き換えてやれば、走査線単位でパレット値を変化させることができる。 *2

ただ、パレット値を書き換えると、次回の描画時に、暗くなったパレット値のまま画面を描いてしまうので…。TIC()内の最後のあたりで sync(1<<5) を呼んでパレットをリセットしている。

_sync - nesbox/TIC-80 Wiki

sync() に、マスク情報を渡しながら呼ぶことで、画像領域、マップ、効果音、音楽、パレットを、new した直後の状態にリセットできるらしい。また、おそらく有償版の TIC-80 なら、sync() を使ってバンク切り替えもできる模様。

OVR()についてメモ。 :

TIC() や SCN() の描画後に、別の何かを独立して描画できる OVR() については、実装された際に書かれた記事が参考になりそうだなと。

_Overlap mode - Issue #429 - nesbox/TIC-80
_TIC-80さんのツイート: "going to add new "overlap" mode to #TIC80 https://t.co/AaOOmN7HRd to create this kind of effects… "

上記記事のスクリーンショットの事例では、スクロールだけなら map() を複数呼ぶことでも実現できるけど。1ライン描画するたびにパレット値を書き換えて、BG相当を少しずつ暗くしてる・グラデーションにしているあたりがポイントかもしれないなと。もし OVR() が無かったら、自機も1ラインずつ暗くなってしまうはず。

余談。CRTっぽい表示。 :

_Releases - nesbox/TIC-80 の Changelog を眺めていたら、F6キーを押すとCRT(ブラウン管)っぽい表示ができると知った。

tic80_crt_look_ss01.png

ホントだ…。それっぽい…。円形に歪ませつつ、 _シャドーマスク っぽいソレにしてるのかな…。

_アパーチャーグリル - Wikipedia
_スロットマスク - Wikipedia

*1: メガドライブの実機では、水平帰線割込みでパレット値を書き換えると画面にノイズが出てしまうので、該当部分にスプライトを乗せてチラつかせる等の小技が必要だった記憶があるけれど。TIC-80は疑似的にこういった処理をしてるだけなのでノイズが出ないから、妙な小技を使わなくて済む分、気楽に遊べてイイ感じだなと…。
*2: ちなみに今回は、水面の境界ラインで、1回しか書き換えてない。

#2 [nitijyou] 県知事選に投票してきた

福島県知事選の投票に行ってきた。AM10:00頃、集会所まで自転車で。帰りにスーパーによって夜食等を購入。

現職の知事が立候補していたので、保守的な福島県民のことだからおそらくは、と予想していたけれど、夜のニュースを眺めたらやはりそんな感じになったらしい。それはさておき、投票率はどうだったのだろう。今回は低くなるのでは、と誰かが予想していた記憶があるけれど。

以上、3 日分です。

過去ログ表示

Prev - 2018/11 -
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project