1.イントロダクション

Luaの基本事項

まず、ブラシスクリプトで踏まえることは、Luaという小型の言語で書くということです。 ブラシスクリプトの仕様は、FireAlpacaのページに記載されていますが、Luaの基本事項を先に理解している前提のようです。 ひとまず、Luaの基本事項をいくつか挙げてみます。

コメントは、以下のように書きます。コメントは、スクリプト処理で無視されます。

--あとは、好きなようにしてください。一行コメントですが。
comment=1

--[[あとは、好きなようにしてください。
複数行コメントだから、少しは余裕があります。]]

comment="maltiple"

一行ならば、頭に半角ハイフン2つを付けます。複数行ならば、頭に--[[、後ろに]]を付けます。

文字列

文字列は、アルファベット以外にも日本語でもOKなはずです。以下のように、シングルか、ダブルのクオーテーションで囲みます。

a='Luaの文字列'
a="Luaの文字列"

しかし、このままではシングルとダブルのクオーテーションは、文字列内で使えないので、バックスラッシュを前につけます。 バックスラッシュ自体も使えないので、同じようにします。

a='シングルクオーテーションは、\'とします。'
a="ダブルクオーテーションは、\"とします。"
a="バックスラッシュは、回避用途に使われているので、\\とします。"

また、文字列同士を連結したい場合は、プラス記号を使いたくなるところですが、ピリオドを2つで繋げます。

a="aaa".."bbb"

ブラシスクリプトでは、主にパラメータの名前に使われるだけなので、最低限のことで十分だと思われます。

ブラシスクリプトの処理の流れ

基本形は、function 関数名(変数,...)~endという関数を定義する形のようです。 必然的に、mainという関数名は使います。こんなコードでも、エラー自体は出ないはず。

function main(x, y, p)

end

ただし、何も起きません。中身がない状態だからです。 とはいえ、関数自体はカーソルの座標が動くたびに実行されています。 とりあえず、 以下のように、return 1を追加すると、関数の結果を返せるようになります。

function main(x, y, p)
    return 1
end

しかし、このコードでも目に見える変化はありません。 それでも、変数に入っている値を利用して計算、結果を返す、これらの処理をするための下地はできます。

また、関数や変数は、幾らでも定義するので、名前をつけて管理しますが、ルールがあります。 まずは、命名に使用できる文字は半角英数字とアンダーバーであること。 次に、最初の文字を数字にしないこと。 最後に、以下のリストのキーワード以外を使用しないことです。

そういえば、(x, y, p)は何なのかというと、変数の一種です。 初めから、何かしら値が入っています。xyは、横と縦のカーソル座標で、pは筆圧です。

さて、以下のブラシスクリプトのコードを例に、これから各項目を述べていきます。

function param1()
    return "interval", 0, 100, 0
end
function param2()
    return "p_alpha", 0, 1, 0
end

firstDraw=true
lastX=0
lastY=0

function main(x, y, p)

    local w=bs_width()
    local distance=bs_distance(lastX-x, lastY-y)

    local interval=0

    if w < 10 then
        interval=w+w*bs_param1()/100
    elseif w < 20 then
        interval=w/1.5+w*bs_param1()/100
    else
        interval=w/2+w*bs_param1()/100
    end

    if not firstDraw then
        if distance < interval then
            return 0
        end
    end

    local r, g, b=bs_fore()
    local a=bs_opaque()*255

    if bs_param2() == 1 then
        a=a*p
    end

    local array={
        {w, 0},
        {w/1.5, 0.5},
        {w/3, 1}
    }

    for i=1, #array do
        local w=array[i][1]
        local c=array[i][2]
        bs_ellipse(x, y, w, w, 0, r*c, g*c, b*c, a)
    end

    firstDraw=false
    lastX=x
    lastY=y

    return 1
end

上のコード自体は、以下の画像のような線を描画するものです。 基本的な処理としては、描画するのに必要なパラメータを先に設定してから、描画しています。 当たり前なことですが、確実にこなすことで、エラーが減るように思えます。 そして、カーソルを動かす限り、これらの処理は繰り返されます。

test.bsのサンプル画像

確認事項

Luaのバージョン

Luaのバージョンは、5.1です。_VERSION(データは文字列型)で、確認できます。 手軽な確認方法は、一時的にパラメータの名前に_VERSIONを宛がうことです。

スクリプトの試作

スクリプトファイルは、拡張子が.bsで、文字コードがUTF-8(BOMなし)です。 Notepad.exeは使わないで、BOMなしで保存できるエディタを使うことが基本です。 既にLuaの設定があるNotepad++VSCodeAtom辺りを使うと楽です。 キーワードを追加したい場合は、Notepad++を選ぶと簡単でしょう。

しかし、現在は上記のエディタ類を使わなくても、 FireAlpacaMedibangPaintProに追加されたエディタでほぼ事足ります。 試作するにおいては、すぐに動作のチェックが可能な為、こちらのほうが良いかと思います。

ただし、このエディタには、文字の検索や置き換えなどの機能がありません。 じっくり編集する際は、他のエディタを使いましょう。

その他

このチュートリアルもどきでは、Luaの詳細まで触れずに、必要な部分を切り出して記載しています。

Back to Index