mieki256's diary



2022/07/20(水) [n年前の日記]

#1 [cg_tools][tic80] TIC-80のパレットデータを手元に残そうとして少しハマった

TIC-80 は、ある時期からパレットデータを SWEETIE 16 というデータに差し替えていたらしいのだけど。 *1

_Palette - nesbox/TIC-80 Wiki
_Sweetie 16 Palette - lospec.com

この SWEETIE 16 パレットデータを手元に残そうとして、少しハマってしまった。

TIC-80 の Wiki にアップロードされているパレットデータ画像は、ページに記述されてる数値とビミョーに違っているようで…。具体的には、水色がちょっとずれてる。作業していてなんだか変だなと思ったら、そういうオチだった…。

そんなわけで、画像はちょっと当てにならないので、記述されている数値を元にしてパレットデータ画像を新規に生成するPythonスクリプトを書いてみた。

いやまあ、losepc.com からダウンロードできる画像や .gpl を使えば問題無さそうだけど…。ざっと調べた感じでは、そちらはちゃんと数値が合ってるように見えた。TIC-80 の Wiki に載ってる画像のみがおかしい。

_Sweetie 16 Palette - lospec.com

でもまあ、「Python + Pillow を使えばこういうこともできるよね」的サンプルの一つ、みたいな感じで一応アップロードしておきます。

生成した .gpl や .png。 :

生成した .gpl (GIMP Palette ファイル) や .png は以下。

_sweetie-16_tic80new_.gpl
_sweetie-16_tic80new.png
sweetie-16_tic80new.png

生成Pythonスクリプト。 :

動作確認環境は、Windows10 x64 21H2 + Python 3.9.13 64bit + Pillow 9.1.1。

sweetie-16_tic80new_.gpl と sweetie-16_tic80new.png を生成する。

動作には Pillow のインストールが必要。pip install Pillow -U でインストールできるはず。

_create_sweetie-16_image.py
from PIL import Image
from PIL import ImageDraw


out_gpl_file = "sweetie-16_tic80new_.gpl"
out_img_file = "sweetie-16_tic80new.png"

title = "Sweetie-16 (TIC-80 new)"

tbl = [
    ["Black", 0, "1A1C2C"],
    ["Purple", 1, "5D275D"],
    ["Red", 2, "B13E53"],
    ["Orange", 3, "EF7D57"],
    ["Yellow", 4, "FFCD75"],
    ["Light Green", 5, "A7F070"],
    ["Green", 6, "38B764"],
    ["Dark Green", 7, "257179"],
    ["Dark Blue", 8, "29366F"],
    ["Blue", 9, "3B5DC9"],
    ["Light Blue", 10, "41A6F6"],
    ["Cyan", 11, "73EFF7"],
    ["White", 12, "F4F4F4"],
    ["Light Grey", 13, "94B0C2"],
    ["Grey", 14, "566C86"],
    ["Dark Grey", 15, "333C57"],
]


def main():

    pal = []

    # create .gpl
    lst = []
    lst.append("GIMP Palette")
    lst.append("Name: %s" % title)
    lst.append("Columns: 8")
    lst.append("#")
    lst.append("#")

    for t in tbl:
        name, index, hexstr = t
        col = int(hexstr, 16)
        r = (col >> 16) & 0x0ff
        g = (col >> 8) & 0x0ff
        b = col & 0x0ff
        s = "%-8d%-8d%-8d%06x  %d  %s" % (r, g, b, col, index, name)
        lst.append(s)
        pal.append((r, g, b))

    for s in lst:
        print(s)

    # save .gpl file
    with open(out_gpl_file, mode="w") as f:
        f.write("\n".join(lst))
        f.write("\n")

    print("# Save %s" % out_gpl_file)

    # create image and save
    xcnt, ycnt = 8, 2
    # xcnt, ycnt = 16, 1

    w, h = 32, 32
    img_w, img_h = w * xcnt, h * ycnt

    im = Image.new("P", (img_w, img_h), (0, 0, 0))
    paldata = []
    for c in pal:
        r, g, b = c
        paldata.append(r)
        paldata.append(g)
        paldata.append(b)

    im.putpalette(paldata, rawmode="RGB")
    
    draw = ImageDraw.Draw(im)

    x, y = 0, 0
    for c in range(len(pal)):
        draw.rectangle((x, y, x + w - 1, y + h - 1), fill=c)
        x += w
        if x >= img_w:
            x = 0
            y += h

    im.save(out_img_file)
    print("# Save %s" % out_img_file)


if __name__ == '__main__':
    main()

py create_sweetie-16_image.py で実行すれば、.gpl と .png が得られる。

*1: 最初の頃は、DB16 (DawnBringer 16) というパレットデータが割り当てられてた。

以上です。

過去ログ表示

Prev - 2022/07 - Next
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project