見出し画像

Noto Emojiをゲームの素材として利用する

私は絵が描けないので、ゲームを作ろうと思い立った時には一番その点が悩みのタネです。

といっても、ネットで探せばゲーム用の素材が置かれていたり買えたりしますし、本気度が高ければココナラとかで有償で依頼するとか、いくらでも方法はあるのですが、先日ふと「Noto Emoji」というハイクオリティな  Googleフォントを見つけて、シンプルなUIのゲームだったらこれも素材として使えるかもなあ、と思いました。

絵文字をpngファイルとかにしてしまえば何とでもなるので、ChatGPTさんに頼んでちょっとコードを書いてもらいます。こういう、ちょっとした「使い捨てのスクリプト作りたい」みたいなときにはChatGPTのコード生成機能がすばらしく便利ですね。

from PIL import Image, ImageDraw, ImageFont

font_path = "NotoEmoji-Regular.ttf"
font_size = 48
out_size = 64
font = ImageFont.truetype(font_path, font_size)


def text_to_image(text, output_file, color=(255, 255, 255)):

    # テキストのサイズを取得
    text_width, text_height = font.getbbox(text)[2:]

    # 画像のサイズを64x64に固定
    img_width, img_height = out_size, out_size

    # 元のアスペクト比を維持し、画像サイズに合わせてリサイズ
    scale = min(img_width / text_width, img_height / text_height)
    new_font_size = int(font_size * scale)

    # リサイズ後のフォントを読み込む
    resized_font = ImageFont.truetype(font_path, new_font_size)
    new_text_width, new_text_height = resized_font.getbbox(text)[2:]

    # リサイズ後のテキストの位置を計算
    x = (img_width - new_text_width) // 2
    y = (img_height - new_text_height) // 2

    # イメージを作成
    image = Image.new("RGBA", (img_width, img_height), (0, 0, 0, 255))
    draw = ImageDraw.Draw(image)

    # テキストを描画
    draw.text((x, y), text, font=resized_font, fill=color)

    # イメージを2値化
    binary_image = image.convert("1")

    # 画像を保存
    binary_image.save("./out/" + output_file + ".png")


# 使用例
inputs = [
    ("👻", "00-ghost"),
    ("🎃", "01-pumpkin"),
    ("👹", "02-tengu"),
    ("🔥", "03-fire"),
    ("🦠", "04-virus"),
    ("🧚", "05-faily"),
    ("🧞", "06-spirit"),
    ("🧙", "07-magician"),
    ("🧛", "08-vampire"),
    ("🧟", "09-zombie"),
    ("🧌", "0a-goblin"),
    ("🦹", "0b-devil"),
    ("🥷", "0c-ninja"),
    ("👼", "0d-angel"),
    ("🗡️", "0e-sword"),
    ("🗽", "0f-goddess"),
    ("🦄", "10-unicorn"),
    ("🐉", "11-dragon"),
    ("🦎", "12-lizard"),
    ("🦖", "13-tyrannosaurus"),
    ("🦕", "14-Prokiosaurus"),
    ("🐢", "15-turtle"),
    ("🐊", "16-crocodile"),
    ("🐍", "17-snake"),
    ("🐀", "18-rat"),
    ("🐅", "19-tigar"),
    ("🐆", "1a-cheetah"),
    ("🐎", "1b-horse"),
    ("🦬", "1c-buffalo"),
    ("🦣", "1d-mammoth"),
    ("🦏", "1e-rhinoceros"),
    ("🦍", "1f-gorilla "),
    ("🦫", "20-beaver"),
    ("🦔", "21-hedgehog"),
    ("🦇", "22-bat"),
    ("🦅", "23-eagle"),
    ("🦚", "24-peafowl"),
    ("🦈", "25-shark"),
    ("🦐", "26-crayfish"),
    ("🦀", "27-crab"),
    ("🦑", "28-squid"),
    ("🐙", "29-octopus"),
    ("🦂", "2a-scorpion"),
    ("🕷️", "2b-spider"),
    ("🪰", "2c-fly"),
    ("🐝", "2d-bee"),
    ("🦋", "2e-butterfly"),
    ("🪱", "2f-earthworm"),
]

for input in inputs:
    text_to_image(input[0], input[1])

画像化対象の絵文字だけは、自分でNoto Emojiの一覧を眺めた上で「RPGのモンスター1枚絵で使えそうな絵文字」を選定しまして、できあがった画像ファイルがこちら。64x64、合計48キャラです。

Noto Emojiを画像化

モンスターにしては全体的に可愛らしい感じなので、ゲームの雰囲気にもよると思いますが、プロトタイプ版として仮置きするような用途も含めて、アリっちゃアリかなあと。

ちなみに今回はモノクロ版を使っていますが、Noto Emojiはカラー版もあります。ただ、そちらはよりポップになってしまうので、モノクロのほうがレトロゲームっぽい雰囲気が出せるかなあという印象です。

ウィザードリィっぽい画面を作ってみました

シンプルなUIといえば初期のウィザードリィ。
最近(これを書いているのは2023/4/22)ウィザードリィの公式Twitterアカウントが誕生した記念(?)の意味も込めて、いつも使っているレトロゲームエンジン「Pyxel」を使って、やっつけでゲーム画面を作ってみました。

(フォントは「美咲フォント」を使っています。)

ウィザードリィの戦闘シーン風画面

初期ウィザードリィは、モンスター画像以外はほぼ線画(ダンジョン)・文字・ウィンドウのフレームくらいで画面が成立するので、この素材だけでゲームを仕上げてしまうこともできそうですね。


いいなと思ったら応援しよう!