[Pyxel]機能拡張:カラー機能拡充!
先日Pyxelのバージョンアップがありました。
Pyxel 2.5.9 is released! The SDL has been updated to 2.32. Also, the tool UI now changes according to the palette file.
— Takashi Kitao (@kitao) October 22, 2025
Pyxel 2.5.9をリリースしました!
SDLがバージョン2.32になり、色数に応じてツールのUIが変わるようもなりました。https://t.co/kQjZxGQNjV#pyxel #python #gamedev pic.twitter.com/YizxHuZn29
カラーパレット機能については、拡張をしてみたいと思っていました。
#Pyxel の拡張パレットを作るかー。どんな色が足りない感じかな~?と思いながらお気に入りゲームのスクショを食わせてみた結果。
— もっQ(ぐれみ) (@ronegray) October 7, 2025
びっくりの再現度!
すげーセンスで選び抜かれた16色なんだなあ… pic.twitter.com/wPrZKPhB7w
思いつつも試してこなかったので、これを機会にちょっと触ってみました。
まずは仕様の確認。

RGB値で色を指定するのはいいんだけど、どう指定すれば何色になるんだか、文字では分からんので…
最近はドット絵を描くのにEDGEというフリーソフトを使ってるので、このパレットを取り込んでみようと思いました。
EDGEで作ったパレットデータを移植してみた。適当にhttps://t.co/UtsJNAhtbZ_pal("file.pyxpal")、EDGEからテキスト出力、ExcelでDEC2HEXで成形(笑)、file.pyxpalに追記、普段使うpyxresと名前を合わせたpyxpalを作って、pyxel edit hoge.pyxres で読込#Pyxel https://t.co/WtYwR88o4K pic.twitter.com/NfbDQLfO0O
— もっQ(ぐれみ) (@ronegray) October 22, 2025
パレットファイルは最初から存在する訳ではないので、まずはデフォルトパレットのファイルを作成。適当なスクリプトを描いて実行すれば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

自分なりに色々弄ったパレットでは、画像読込時の表示も変わりました。
ちょっと前に比較画像作ったやつを拡張パレット込みでもう一度
— もっQ(ぐれみ) (@ronegray) October 22, 2025
やべーすげー!
色々駆使しなくてもSFC並みの表現が手軽にできるように!!#Pyxel https://t.co/BndrKPbGYm pic.twitter.com/mK0LE4SoGr
pyxpalに指定何色行けるのか試してみましたが、256行(色)ではエラーになりました。255色、そのうち1色は透過にすると思うので実質254色が使える感じですね。
色が増えればリッチな表現が出来る分、誤魔化しもきかなくなるので大変な面もあるように思いますが、豊かなゲーム制作環境になる事は間違いないです。
これからもゲーム作りを楽しんでいきたいですね!
