2022/10/30(日) [n年前の日記]
#1 [tic80] TIC-80 1.0.2164の変更点をメモ
Fantasy Computer (Fantasy Console)、TIC-80 1.0.2164 の動作確認中。環境はWindows10 x64 21H2。
_TIC-80 tiny computer
_nesbox/TIC-80: TIC-80 is a fantasy computer for making, playing and sharing tiny games.
_Home - nesbox/TIC-80 Wiki
以前の版(0.70.6 / 0.90.1723)と比べて、いくつか仕様が変更されたり、機能が追加されていた模様。気づいた範囲でメモ。
_TIC-80 tiny computer
_nesbox/TIC-80: TIC-80 is a fantasy computer for making, playing and sharing tiny games.
_Home - nesbox/TIC-80 Wiki
以前の版(0.70.6 / 0.90.1723)と比べて、いくつか仕様が変更されたり、機能が追加されていた模様。気づいた範囲でメモ。
◎ ユーザディレクトリの指定について。 :
以前の版では、「tic80.exe .」を指定して起動すると、カレントディレクトリをユーザディレクトリにすることができたけれど、TIC-80 1.0.2164 (正確には 0.90 以降)では以下の指定に変わった。
_Command Line Arguments - nesbox/TIC-80 Wiki
例えば、カレントディレクトリに hoge というディレクトリがあって、その中でロードやセーブをしたいなら、以下の指定になる。
tic80.exe --fs=. tic80 --fs=.
_Command Line Arguments - nesbox/TIC-80 Wiki
例えば、カレントディレクトリに hoge というディレクトリがあって、その中でロードやセーブをしたいなら、以下の指定になる。
tic80.exe --fs=hoge
◎ 表示拡大率の指定。 :
表示ウインドウのサイズが大き過ぎる時は、--scale=x で表示拡大率を指定できる。
_Command Line Arguments - nesbox/TIC-80 Wiki
tic80.exe --scale=2 tic80.exe --scale=1
_Command Line Arguments - nesbox/TIC-80 Wiki
◎ SCN()は非推奨になった。 :
以前の版の TIC-80 には、ウインドウ内の横1ライン分を描画する直前に呼ばれる関数として SCN() という関数が用意されていた。昔のゲーム機で言えば、水平帰線期間(HBlank)割り込み処理に相当する関数。
その SCN() は、0.90 から非推奨になっていた。代わりに BDR() を使え、とのこと。
_BDR (0.90) - nesbox/TIC-80 Wiki
_SCN - nesbox/TIC-80 Wiki
ただし、SCN() に入ってくる値と、BDR() に入ってくる値は若干違う。BDR() には、SCN() に渡されていた値 + 4 (これから描画しようとしているy座標 + 4)が入ってくる。
その SCN() は、0.90 から非推奨になっていた。代わりに BDR() を使え、とのこと。
_BDR (0.90) - nesbox/TIC-80 Wiki
_SCN - nesbox/TIC-80 Wiki
ただし、SCN() に入ってくる値と、BDR() に入ってくる値は若干違う。BDR() には、SCN() に渡されていた値 + 4 (これから描画しようとしているy座標 + 4)が入ってくる。
- BDR(4) は SCN(0) と同じ。
- BDR(139) は SCN(135) と同じ。
BDR(0) | TOP BORDER | |
BDR(1) | TOP BORDER | |
BDR(2) | TOP BORDER | |
BDR(3) | TOP BORDER | |
BDR(4) | SCN(0) | y=0 のラインが描画される直前に呼ばれる |
BDR(n) | SCN(n-4) | y=(n-4) のラインが描画される直前に呼ばれる |
BDR(139) | SCN(135) | y=135 のラインが描画される直前に呼ばれる |
BDR(140) | BOTTOM BORDER | |
BDR(141) | BOTTOM BORDER | |
BDR(142) | BOTTOM BORDER | |
BDR(143) | BOTTOM BORDER |
◎ SCREEN OFFSET値は正負が反転してる。 :
BDR() 内で Screen Offset値が格納されてるアドレス、0x3FF9、0x3FFA に値を書き込むとラスタースクロールっぽいことができるのだけど。
_RAM - nesbox/TIC-80 Wiki
_TIC-80でラスタースクロール処理
_TIC-80でラスタースクロール処理その2
その、Screen Offset に書き込む値は、以前の版と +/- が逆になっていた。ただ、変更履歴にそのあたりの記述が無いので、もしかすると単にバグかもしれない…。
_Releases - nesbox/TIC-80
仕様なのかバグなのか分からないけど、何にせよ、TIC-80 1.0.2164 においては、Screen Offset に指定する値が以前の版とは違っているので注意。なんだか変な結果になるなと思ったら、試しに正負を反転した値を書き込んでみれば改善されるかもしれない。
_RAM - nesbox/TIC-80 Wiki
_TIC-80でラスタースクロール処理
_TIC-80でラスタースクロール処理その2
その、Screen Offset に書き込む値は、以前の版と +/- が逆になっていた。ただ、変更履歴にそのあたりの記述が無いので、もしかすると単にバグかもしれない…。
_Releases - nesbox/TIC-80
仕様なのかバグなのか分からないけど、何にせよ、TIC-80 1.0.2164 においては、Screen Offset に指定する値が以前の版とは違っているので注意。なんだか変な結果になるなと思ったら、試しに正負を反転した値を書き込んでみれば改善されるかもしれない。
◎ テキストファイルで保存する機能は制限あり。 :
以前は、ソースコードや画像リソース等を .tic で保存する代わりに、テキストファイル(.lua)で保存することもできていたらしいのだけど。TIC-80 1.0.2164 はPro版じゃないとその機能を使えなくなった模様。無料版はソースコードを直接テキストで保存することはできない。たぶん。
では、どうすればソースコードを取り出せるのか…。TIC-80上では、F1キーを押すとコードエディタになるけれど。Ctrl+A でソースを全選択してから Ctrl+C でコピーすれば、クリップボードにソースコードをコピーできるので、それを別のエディタ上で貼付けしてやれば、無料版でもソースコードをテキストとして取り出せなくもない。
ちなみに、github上では、「お金が無い人のために、Pro版のビルドもしやすくしておいたよ」との一文があった。ビルド環境を用意できそうな人は試してみてもいいかもしれない。
では、どうすればソースコードを取り出せるのか…。TIC-80上では、F1キーを押すとコードエディタになるけれど。Ctrl+A でソースを全選択してから Ctrl+C でコピーすれば、クリップボードにソースコードをコピーできるので、それを別のエディタ上で貼付けしてやれば、無料版でもソースコードをテキストとして取り出せなくもない。
ちなみに、github上では、「お金が無い人のために、Pro版のビルドもしやすくしておいたよ」との一文があった。ビルド環境を用意できそうな人は試してみてもいいかもしれない。
For users who can't spend the money, we made it easy to build the pro version from the source code: (cmake .. -DBUILD_PRO=On)
◎ OVR()内では色番号0番は必ず透明。 :
OVR()という関数を使うことで、一番最後に描画させる処理を別途記述することができるけど。OVR()内でスプライトの描画指定をすると、何故か色番号0番が必ず透明になる。
_everything drawn in OVR with color 0 is transparent - Issue #1897 - nesbox/TIC-80
0番にはえてして黒色が設定されていたりするので、OVR()内で描画指定するものについては黒色が使えない、ということになりそうだなと…。
回避策はあるらしいのだけど、眺めてもよく分からなかった…。
_everything drawn in OVR with color 0 is transparent - Issue #1897 - nesbox/TIC-80
0番にはえてして黒色が設定されていたりするので、OVR()内で描画指定するものについては黒色が使えない、ということになりそうだなと…。
回避策はあるらしいのだけど、眺めてもよく分からなかった…。
◎ Rubyをサポート。 :
TIC-80用のスクリプトは色々な言語で書けるのだけど、Ruby (mruby) もサポートされたらしい。
_Ruby scripting support by remi6397 - Pull Request #1726 - nesbox/TIC-80
以下のサンプルは、Ruby (mruby) で書かれた事例。ESCキー → CLOSE GAME → F1キーでソースが見れるけど、たしかに Ruby で記述されてる。
_Games > RUBY PONG - TIC-80 1.0.2164 (b09c50c)
mruby って詳しくないけど、もしかして class も使えるのだろうか。だとしたら、Lua で書くより楽かも…。Lua でクラスを書くのは少し面倒臭いから…。
_Ruby scripting support by remi6397 - Pull Request #1726 - nesbox/TIC-80
以下のサンプルは、Ruby (mruby) で書かれた事例。ESCキー → CLOSE GAME → F1キーでソースが見れるけど、たしかに Ruby で記述されてる。
_Games > RUBY PONG - TIC-80 1.0.2164 (b09c50c)
mruby って詳しくないけど、もしかして class も使えるのだろうか。だとしたら、Lua で書くより楽かも…。Lua でクラスを書くのは少し面倒臭いから…。
[ ツッコむ ]
以上です。