mieki256's diary



2015/12/04(金) [n年前の日記]

#1 [cg_tools][dxruby] EDSCIIでMZ-700のキャラグラを描くためのフォント画像とパレット画像を作成

_ASCII/ANSI Artエディタ EDSCII で、MZ-700のキャラグラを描くためのフォント画像とパレット画像を用意したので置いときます。

_edscii_append_mz700_20151204.zip

こんな感じのキャラグラが描けるようになります。

edscii_mz700_sample01.png

edscii_mz700_sample02.png

edscii_mz700_sample03.png

ちなみに、MZ-700の文字セットを使いながら、パレットはファミコン(NES)のモノを使って描く、てのもなかなか面白いです。若い人達には「それのどこが面白いの?」だけど、当時を知ってるおじさん達だけは一瞬頭がクラクラ、なのです。

導入の仕方。 :

  1. 解凍する。
  2. fontフォルダに入ってる mz700*.png、mz700*.char を、EDSCIIインストールフォルダ\char フォルダにコピー。
  3. palフォルダに入ってる mz700*.png を、EDSCIIインストールフォルダ\palフォルダにコピー。

使い方。 :

EDSCII起動後、TABキーを押すとコマンドラインモードに入るので、
char mz700
pal mz700
char mz700a
pal mz700
みたいな感じで打ち込むと、文字セットやパレットセットが選べます。

フォント画像とパレット画像について。 :

フォント画像は2つありますが、以下のような違いがあります。
  1. mz700.png は、大文字アルファベット+カタカナ
  2. mz700a.png は、小文字アルファベット+ひらがな
見れば分かるかな…。

mz700.png

mz700a.png


パレットは16色ありますが、8色を2度繰り返してるだけで違いはないです。EDSCIIは8色のパレットを渡すと落ちるっぽいので仕方なく。最低16色無いといかんみたいで。これも見れば分かるか…。

mz700.png

EDSCIIの制限。 :

一応メモ。
  • 256文字までしか扱えない。
  • 使うフォント画像は、記号、数字、アルファベットが含まれている状態が望ましい。UI表示にもその文字群を実際に使うので。
  • アルファベットは、大文字のみ、小文字のみでも構わない。できれば両方あったほうが望ましい。
  • パレットは最低でも16色は必要。8色だとアプリが落ちる。

EDSCIIのショートカットキー。 :

hキーを押して表示されるヘルプの内容をメモ。
  ASCII/ANSI Artエディタ EDSCIIの操作方法についてメモ
  ===================================================
  
  ※ LMBはマウスの左クリック、RMBは右クリック、MMBは中ボタン(ホイール)クリック
  
  a :  pAint ペイント
  e :  erasE 消しゴム
  r :  pickeR スポイト?
  n :  liNe 線描画
  3/4 :  brush size down/up ブラシサイズ変更 縮小 / 拡大
  t :  texT テキスト入力
  i :  fIll (cycle char/fg/bg) 塗り潰し (押すたびに文字/前景色/背景色の塗り潰しに切り替わる)
  
  選択モードについて
  ------------------
  
  k :  seleKt 選択モード
  
  ### 選択モード時の操作
  
  LMB :  drag to select 選択
  MMB :  copy selection コピー
  RMB :  cut selection 切り取り
  LMB :  paste (after cut/copy) 貼り付け(切り取り・コピーをした直後の動作)
  RMB :  abort paste 貼り付け中止
  del :  clear selection 消去
  CTRL-x :  cut selection 切り取り
  CTRL-c :  copy selection コピー
  CTRL-v :  paste selection 貼り付け
  
  文字/色選択について
  -------------------
  
  space :  char/color selector 押しっぱなしで、文字/色選択ウインドウ表示
  
  ### 文字/色選択ウインドウ表示時の操作
  
  LMB :  select char/fg color 文字/前景色の選択
  RMB :  select bg color 背景色の選択
  
  ペイント制御
  ------------
  
  c :  toggle char paint 文字ペイントのon/off
  f :  toggle fg color paint 前景色ペイントのon/off
  b :  toggle bg color paint 背景色ペイントのon/off
  
  q/w :  previous/next char 選択文字を変更(前後)
  Q/W :  up/down char row 選択文字を変更(行)
  1/2 :  previous/next fg color 前景色を変更
  !/@ :  previous/next bg color 背景色を変更
  s :  swap selected fg/bg 前景色と背景色を交換
  
  その他
  ------
  
  h :  help screen ヘルプ表示
  +/- :  screen scale 画面ズーム変更(日本語キーボードの場合は、^/-キー)
  arrows :  pan view 画面をPAN
  z/Z :  undo/redo 取り消し/やり直し
  
  ファイル関係
  ------------
  
  CTRL-l :  load file データファイルを開く
  CTRL-s :  save file データファイルを保存(コマンドラインモードで保存した後に使うべき)
  CTRL-q :  quit アプリ終了
  
  コマンドラインモードについて
  ----------------------------
  
  TAB :  command line コマンドラインモードに入る
  
  ### コマンドラインモード時の操作
  
  load :  load new art データファイルの開く。例: load hoge.txt
  save :  save art データファイルを保存。例: save hoge.txt
  char :  load new character set 文字セットを変更。例: char dos50
  pal :  load new color palette パレットを変更。例: pal nes
  conv :  convert raster image
  export :  export as PNG png画像としてエクスポート
  size :  resize art
  vsize :  resize screen
  help :  help screen ヘルプ表示
  quit :  quit アプリ終了

おまけ。 :

_紅茶羊羹さんが「MZ-700 CGROM後半がこうだったらよかったのに」 とつぶやいてるのを見かけて、「実際こうなってたら、MZ-700の画面はどうなっただろう」と気になったので、試しに件の画像もフォント画像として勝手に用意してみました。

mz700youkan.png
_mz700youkan.char.txt

こんな感じのアレコレが描けたのだろうなあ。

edscii_mz700_sample04.png


ただ、EDSCIIは256文字しか使えないので、アトリビュートが0か1かのどちらかの状態でしか描けんわけで。…これはもしかして、256文字以上使って描ける何かしらを作らねばならんのだろうか。

EDSCIIって、どうも Python + pygame で書かれてるっぽいんですよね…。てことは、Ruby + DXRuby でも、こういうツールを書けるのかなと思えてきたりして。

でも、せっかく今から作るなら、アルファチャンネルもサポートしたいよな。DXRuby はアルファチャンネルを持った画像を書き出せなかった記憶があるし。別の何かを選択したほうが良いのだろうか。

#2 [python] 縦に並んだフォント画像を横に並び替えるPythonスクリプトを書いた

昔の8bitPCのCGROM?画像はえてして縦に並んでるのだけど、今時使うとしたら横に並んでるほうがいいわけで、縦の並びを横の並びにするPythonスクリプトを書いたりして。PIL(Pillow)を使えば簡単ですね。

_conv_h_v.py
# -*- mode: python; Encoding: utf-8; coding: utf-8 -*-

"""
8x8ドットのフォントが縦方向で敷き詰められた画像に対して横方向に並び替える
"""

import sys
from PIL import Image


def main():
    if len(sys.argv) != 3:
        print "usage: conv_h_v.py INPUT.png OUTPUT.png"
        sys.exit()

    infile = sys.argv[1]
    outfile = sys.argv[2]

    cw, ch = 8, 8

    img = Image.open(infile).convert("RGB")
    w, h = img.size
    nimg = Image.new("RGB", (w, h))
    for x in range(w / cw):
        for y in range(h / cw):
            timg = img.crop((x * cw, y * ch, w, h))
            nimg.paste(timg, (y * ch, x * cw))
    nimg.save(outfile)


if __name__ == '__main__':
    main()
usage:
    conv_h_v.py INPUT.png OUTPUT.png

これを。
mz700yk_displaycode_v.png

こうするだけのスクリプト。
mz700yk_displaycode_h.png

以上、1 日分です。

過去ログ表示

Prev - 2015/12 - 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