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はカラー版もあります。ただ、そちらはよりポップになってしまうので、モノクロのほうがレトロゲームっぽい雰囲気が出せるかなあという印象です。
ウィザードリィっぽい画面を作ってみました
シンプルなUIといえば初期のウィザードリィ。
最近(これを書いているのは2023/4/22)ウィザードリィの公式Twitterアカウントが誕生した記念(?)の意味も込めて、いつも使っているレトロゲームエンジン「Pyxel」を使って、やっつけでゲーム画面を作ってみました。
(フォントは「美咲フォント」を使っています。)

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