TIC-80で簡単なプログラムを作ってみる

 
TIC-80については、まだ日本語での情報がほとんどないので「TIC-80 Wiki」をバイブルに読み解いていきたいと思います。

TIC-80 Wiki
https://github.com/nesbox/TIC-80/wiki

以前に「PocketCHIP」を購入して「PICO-8」は触ったことがあるのですが、そのPICO-8に影響されて「TIC-80」が作られているのでインターフェースも含め非常によく似ています。もちろん完成度はPICO-8のほうが優れていますが、後発のTIC-80はいくつかの改善提案もされています。PIC-80はPocketCHIPでの動作も確認されています。


コンソールで使えるコマンドの一覧です。
必要十分なコマンドが揃っています。

【コマンド一覧】
help - 使用可能なコマンドを表示する
ram- 80K RAMレイアウトを表示する
exit - アプリケーションを終了する
new [lua | moon | js]- 新しいHello Worldカートリッジを作成する
load <cart> [sprites | map | cover | code | sfx | music | palette] - ローカルファイルシステムからカートリッジを読み込みます(拡張子を付けずにカート名を入力することもできます)。また、データセクション(スプライト、マップなど)のみを他のカートから読み込むこともできます
save <cart> - カートリッジをローカルファイルシステムに保存する
run - 現在のプロジェクトを実行する
resume - 最後に読み込まれたプロジェクトを再開する
dir - ローカルファイルのリストを表示する
cd - ディレクトリを変更する
mkdir - ディレクトリを作る
folder - OSのオープンディレクトリ(Windows、Linux、MacOSX)
add - TICにファイルを追加するファイルを開くダイアログを表示する
del <file> - ファイルシステムからの削除
get <file> - ファイル保存ダイアログを表示してファイルをダウンロードする
export [html | native | sprites | cover | map] - HTMLやNATIVEのゲームやスプライトを書き出し、.gifとしてカバーする
import [sprites | cover | map] - スプライトまたは.gifからカバーをインポートする
cls - 画面をクリア
demo - デモカートをインストールする
version - 現在のバージョンを表示する
config [save | default]- config.ticファイルエディタを表示する、save paramを使用して現在の設定を保存する、defaultを使用してデフォルトのカートテンプレートを編集する
keymap - キーボードボタンマッピングの設定
surf - カートを開くブラウザ


【グラフィック環境】
グラフィックの解像度はPICO-8は128x128であるに対して、TIC-80は240x136と広くなっています。PICO-8の正方形画面はユニークで特徴的ですが、昔からの慣習もあって若干使いづらく感じます。

TIC-80は画面が広い分、内部フォントも見やすく、コンソールやエディターも広くて使いやすくなっています。できればゲームボーイミクロの240x160程度の解像度がほしいところです。

どちらもパレットは16色ですが、TIC-80の標準パレットカラーは若干渋目でPICO-8のほうがポップな感じがします。標準パレットは「DB16」ですが変更することもできます。

https://github.com/nesbox/TIC-80/wiki/palette



【マウスを使う】
TIC-80ではキーボードだけでなくマウスも利用できます。
プログラムでは下記の命令で座標とボタンの状態を取得できます。
「mx,my,md=mouse()」 --get x,y and pressed


【使用できる言語】
使用できる言語はPICO-8は「Lua」に限定されていますが、TIC-80は「Lua」の他に「MoonScript」や「JavaScript」も実行できます。Luaが苦手なら、JavaScriptで作った過去のプログラムを移築することも可能かと思います。Lua以外を利用する場合はプログラムの冒頭で宣言する必要があります。

Moonscript「- script: moon」
Javascript「// script: js」


【ファイルの管理】
TIC-80はローカルファイルを読み込んだり保存したり出来ますが、カレントフォルダはプログラムを保存している任意のフォルダではありません。私のWindows7環境では下記になります。「ls」コマンドではこのフォルダ内を参照します。

C:\Users\user\AppData\Roaming\com.nesbox.tic\TIC-80

コードエディターは外部のエディター等とカット&ペーストで連携して利用できます。もしコードエディターのフォントが見づらい場合は、外部のエディターで編集したものをTIC-80にペーストできるので便利です。


TIC-80のAPI命令の一覧です。

【API命令一覧】
print - システムフォントで文字列を出力する
font - フォアグラウンドスプライトで定義されたフォントで文字列を出力する
clip - スクリーンクリッピング領域を設定する
cls - 画面をクリアする
pix - 画面上のピクセルの色を設定/取得する
line - 線を引く
rect - 塗りつぶし矩形を描画する
rectb - 矩形の境界を描画する
circ - 塗りつぶした円を描く
circb - 円の枠を描く
spr - スプライトをIDで描画し、回転または反転することができます。
btn - 現在のフレームでゲームパッドボタンの状態を取得する
btnp - 前のフレームに従ってゲームパッドボタンの状態を取得する
sfx - 特定のチャンネルでSFXをIDで再生
map - 画面上の地図領域を描画する
mget - マップタイルインデックスを取得する
mset - マップタイルインデックスを設定する
music - IDで音楽トラックを再生する
peek - RAMからバイト値を読み込む
poke - RAMにバイト値を書き込む
peek4 - RAMから半バイトの値を読み込む
poke4 - RAMに半バイトの値を書き込む
memcpy - RAMのバイトをコピーする
memset - バイト値をRAMに設定する
pmem - 整数値を永続メモリに保存する
trace - コンソールへの文字列のトレース
time - ゲームからの経過時間を返します。
mouse - マウスのXY座標を取得しボタンの状態を押します
sync - 修正されたスプライト/マップをカートリッジにコピーする
tri - 塗りつぶし三角形を描画する
textri - テクスチャを塗りつぶした三角形を描画する
exit - プログラムを中断してコンソールに戻る

PICO-8とは命令語が違うので、そのままでは移行できません。
API命令以外にLuaの標準ライブラリが使用できます。
Luaの解説ページ等を参照してください。

Lua 5.3 リファレンスマニュアル
http://milkpot.sakura.ne.jp/lua/lua53_manual_ja.html


【メモリー空間】
TIC-80は80KBのメモリーを持った仮想コンピュータです。
メモリーは以下の領域で管理されています。


TIC-80は「peek」と「poke」でメモリーにアクセスできるので、直接画面や音楽を触ったりすることもできるようです。


【カバーイメージ】
プログラムが出来たらTIC-80のサイトで公開しましょう。
まずIDを登録してからログインしてPlayサイトでジャンルを選択して投稿できます。カバーイメージはプログラムを実行中に「F7」キーを押すと保存されます。これを忘れて公開するとイメージが表示されません。


【ファンクションキー機能】
ファンクションキーに機能が割り当てられています。画面のハードコピーを撮ったり、動画録画もできます。作品紹介に活用できると思います。

[F1] コードエディター
[F2] スプライトエディター
[F3] マップエディター
[F4] SFXエディター
[F5] ミュージックエディター
[F6] ・
[F7] カバーイメージを保存
[F8] 画面のハードコピーをGIFファイルで保存
[F9] 押すと動画録画を開始、もう一度押すと録画終了してGIF動画を保存
[F10] ・
[F11] 全画面の切り替え
[F12] ・

=================================================

TIC-80で初めて作ったプログラム「Structure Mania」をTIC-80サイトに公開しました。TIC-80サイトでソースコードも公開されているのでプログラミングの参考にしてください。初めて書いたので汚く読みづらいコードだと思いますが・・・w



Structure Mania
https://tic.computer/play?cart=333

元々はScratchで開発したアプリですがTIC-80に移植してみました。
移植と言ったもほぼリビルドですが・・・w

構造体をお絵描きするゲーム MIT Scratch AP Structure Mania 2
https://ttripper.blogspot.jp/2017/04/mit-scratch-ap-structure-mania-2.html

内容的にはマウスで構造体を作って壊して遊ぶ物理エンジン系です。
リセットを押すと地形をランダムに作成します。
重力を変更すると宇宙感が出ると思います。



マウスインターフェースを利用しているので、PICO-8では実現不可能なプログラムになります。物理エンジン系なので計算負荷も大きいのですが、Scratchに比べて非常に高速に処理できます。

TIC-80はサウンド周りがまだ開発中ということでPICO-8のほうが機能も豊富で安定しています。今後の開発に期待したいと思います。