見出し画像

[Pyxel]機能拡張:カラー機能拡充!

先日Pyxelのバージョンアップがありました。

カラーパレット機能については、拡張をしてみたいと思っていました。

思いつつも試してこなかったので、これを機会にちょっと触ってみました。
まずは仕様の確認。

pyxel/docs/README.ja.md抜粋

RGB値で色を指定するのはいいんだけど、どう指定すれば何色になるんだか、文字では分からんので…
最近はドット絵を描くのにEDGEというフリーソフトを使ってるので、このパレットを取り込んでみようと思いました。

パレットファイルは最初から存在する訳ではないので、まずはデフォルトパレットのファイルを作成。適当なスクリプトを描いて実行すればOKです。ちなみにsave_palは新しい関数なのでpyxelのバージョンは2.5.9が必要です。

import pyxel
pyxel.init(32,32,title="make default palette")
pyxel.save_pal("my_resource.pyxpal")

出来たファイルの中身はこんな感じ。Windows11のVScodeで実行した結果です。LFのUTF-8ですが、読めれば大丈夫じゃないかと。

標準パレットファイルの中身

ここにRGB形式でカラーを指定していきます。
元情報はEDGEから拝借する事に。

起動して「新規作成」を選ぶと、画像サイズと使用パレット等を指定するウインドウが表示されます。もう弄ってて分からないのだけど、たぶんデフォルトのパレットを選択。

新規作成

パレットは編集する画像とリンクしているようで、何も開いてない時はパレット上に色が表示されません。

パレット

で、カラーパレットのファイルメニューからRGB値をテキスト出力します。

出力メニュー

中身はこんな感じ。

出力結果

この値を16進値2桁xRGB三色の、6桁16進値に変換する必要があります。
スクリプト書いてもいいのですが、面倒だったので脳死で出来るExcelでやりました。
そのままコピペして、データの区切り位置指定。

張り付いたらDEC2HEX関数で16進数に変換。15以下の値が挟まると全体で6桁の値にならないので、適当に0埋めしてます。

ここにAIにお願いしたVBAマクロを突っ込んで、指定したカラーコードの色を表示してもらいます。


Private Sub Worksheet_Change(ByVal Target As Range)
    ' 列の変更を監視する
    If Not Intersect(Target, Range("H:H")) Is Nothing Then
        ' 変更されたセルがH列にあり、複数セルではないことを確認
        If Target.CountLarge = 1 Then
            ' 変更されたセルが空欄でないか確認
            If Target.Value <> "" Then
                ' セルにRRGGBB形式のカラーコードが入力されているかチェック
                On Error Resume Next
                Dim colorCode As String
                Dim r As Long, g As Long, b As Long
                
                ' カラーコードの取得 (例: "FF0000" → 16進数)
                colorCode = Target.Value
                If Len(colorCode) = 6 Then
                    r = CLng("&H" & Mid(colorCode, 1, 2))
                    g = CLng("&H" & Mid(colorCode, 3, 2))
                    b = CLng("&H" & Mid(colorCode, 5, 2))
                    
                    ' RGB関数で色を適用
                    Target.Offset(0, 1).Interior.Color = RGB(r, g, b)
                End If
                
                On Error GoTo 0
            End If
        End If
    End If
End Sub

その結果がこんな感じ。実際にPyxel画面に表示される色とは色味が(重要ポイントだけど)若干変わります。

こうやって作ったカラーコードを最初に作ったpyxpalファイルに追記して保存すればOKです。

pyxpalの読込には同名のpyxresが必要ですが、これも最初は作られていません。ファイル名を指定しなかった場合、pyxpal作成時に指定した”my_resource.pyxpal"が仮定されるので、この通り。

pyxel edit
カラーパレットが反映された状態
デフォルト状態のエディタ。カラーパレットのレイアウトが変わる。

自分なりに色々弄ったパレットでは、画像読込時の表示も変わりました。

pyxpalに指定何色行けるのか試してみましたが、256行(色)ではエラーになりました。255色、そのうち1色は透過にすると思うので実質254色が使える感じですね。

色が増えればリッチな表現が出来る分、誤魔化しもきかなくなるので大変な面もあるように思いますが、豊かなゲーム制作環境になる事は間違いないです。

これからもゲーム作りを楽しんでいきたいですね!