プチコンまとめArchive

投稿プログラム : プチコン漢字ライブラリ

パンくずリスト

このページの最終更新 : 2019/12/23 (月) 20:08:53

2015年7月1日投稿 / 投稿者 : ほしけん / タグ : 投稿プログラム ツール ライブラリ 漢字

概要

プチコンでグラフィック画面に漢字を表示するためのライブラリです。(これはプチコン3号/BIG用です。プチコン4版はこちらPi STARTER版はこちら)

プチコン Ver.3.2 から「美咲フォント」で漢字表示できるようになったじゃん!! と言われれば確かにその通りですし、過去に「美咲フォント」や「東雲(しののめ)フォント」を搭載した漢字ライブラリが他の方の手によって公開されているので (下記参照)、だいぶ車輪の再発明感があります。

とはいえ、先に作られた上記とただ似たようなものを作ったわけでもなく、このライブラリならではの特長があります。

  • 自家製ドットフォントシリーズKHドットフォントシリーズ、および「美咲フォント」の作者の方が作られたフォントから、思い切って46書体をまとめてプチコン用にコンバートしたので、お好みに応じていろいろなフォントを表示することができます。どのフォントもJIS第1水準漢字JIS第2水準漢字まで入っています。
  • フォントデータは実質的に1ビットのデータになるように長い文字列に詰め込んだので、折り返し表示さえしなければ数行しかありません。これにより、プログラムの中にフォントデータをコピペして埋め込んだりすることがとても簡単にできます。
  • 使いたい文字だけを抜き出して、ものすごく小さくしたフォントデータを作る「サブセット化」ができます。
  • フォントデータの半分近くを占めているJIS第2水準漢字のデータがいらない場合でも、フォントデータのうちの1行 (GKNJDEF 3. ~ で始まる行) を消すだけで簡単に省く事ができます。
  • フォントデータが大きくてもメモリ (FREEMEM) を消費しすぎないような作りになっています。
  • ちょっとだけ文字の描画が速いんじゃないかと思います。

使い方

サンプルプログラムやデモが入っているので、まずは実行してみてください。

  • KNJLIB_DEMO … RPG風のコマンド選択ウインドウと会話ウインドウのデモ
  • KNJLIB_FONTLST … 全フォントをプレビューできます
  • KNJLIB_SAMPLE … 文字の表示の使い方に絞ったサンプルプログラムです。

ライブラリの初期化

KNJLIB というファイルがライブラリの本体です。これを自分のプログラムのプロジェクトにコピーするか、自分のプログラムの末尾にコピペしてください。

漢字ライブラリを使用するには、まず初期化が必要です。

PRG1 (または 2, 3) スロットにライブラリを読み込んで初期化する
  1. EXEC ”PRG1:KNJLIB”

または

  1. LOAD ”PRG1:KNJLIB”,FALSE:USE 1:GOSUB ”1:@KNJLIB_INIT”
自分のプログラムにコピペする

自分のプログラムの末尾にコピペしても動きます。PRGファイルいっこで済ませたい場合や、スロットを節約したい場合はこの方法を使ってみてください。この場合も最初に1回初期化が必要です。

  1. GOSUB @KNJLIB_INIT

文字を描画する

初期化すれば、以降 GKNJ で始まる拡張命令を使うことができるようになります。たとえば、以下で左上に「こんにちは!」と表示します。

  1. GKNJPRINT 0,0,”こんにちは!”

フォントデータは別の巨大な PRG ファイルとしてありますが、ライブラリ本体にも、6つのフォントのJIS第1水準漢字までが内蔵されています。GKNJFONT という命令を使えば、この内蔵のフォントを使うことができます。

  • GKNJFONT 0: k8x12 - 8×12ドットでスーファミ風味
  • GKNJFONT 1: k8x12L - 漢字以外がより大きい
  • GKNJFONT 2: k8x12S - 漢字以外がより小さい
  • GKNJFONT 3: k6x8 - 美咲フォントよりも小さい6×8ドットフォント
  • GKNJFONT 4: M+ BITMAP FONTS 10 - 10×11ドットで小ささと読みやすさのバランスがいい
  • GKNJFONT 5: M+ BITMAP FONTS 12 - 12×13ドットで非常に読みやすい
  1. GKNJFONT 5:GKNJPRINT 0,0,”こんにちは!”

その他、文字の色を変えたり、別のファイルからフォントを読み込んだりできます。詳しくは、サンプルプログラム「KNJLIB_SAMPLE」を見てみるか、ライブラリ本体「KNJLIB」の各ユーザー定義命令の前についたコメントを読んでみてください。Wiki 上の説明は今後もっと詳しくしていきたいと思います。

ライブラリによって追加される関数(おおよそ)

  • GKNJZENKAKU SET%
    • 入力した内容を全角に変換するかを設定する
    • TRUEで全角
  • GKNJTABLEINIT
    • フォントデータ文字テーブルの初期化
  • GKNJTABLE BANK%, TBL$
    • フォントデータ文字テーブルの設定
    • サブセット化したフォントデータを設定したい時に使う
    • BANK%:種別。(0=半角, 1=全角非漢字, 2=JIS第1水準漢字, 3=JIS第2水準漢字)
    • TBL$:文字の並び文字列
  • GKNJDEFINIT W%, H%
    • フォントデータの幅と高さを設定する
  • GKNJDEF BANK%, PAT$
    • フォントデータを直接設定
    • BANK%:種別。数値はGKNJZENKAKUを参照
    • PAT$:すごく長い文字列
  • GKNJEFF EFF%
    • 文字のエフェクト設定
    • 1=影付き, 2=しっかりとした影付き, 4=縁取り, 8=しっかりとした縁取り
    • 上記の数値は足し合わせることが可能
  • GKNJCOLOR COL%
    • 文字色をRGB()で指定
  • GKNJEFFCOLOR COL%
    • 文字のエフェクトの色をRGB()で指定
  • GKNJBGCOLOR COL%
    • 文字の背景色をRGB()で指定
  • GKNJSCALE SCX%, SCY
    • 文字の拡大率をXYそれぞれに指定
    • 文字を拡大すると、文字エフェクトは影付きしか使えなくなる
  • GKNJMGN CHARMGN%, LINEMGN%
    • 行間と文字間隔をピクセル単位で設定する
  • GKNJCMGN CHARMGN%GKNJLMGN LINEMGN%
    • 行間と文字間隔をピクセル単位で設定する。単体設定
  • GKNJPRINT X%, Y%, S$
    • 文字列を描画
    • 座標はピクセル単位
  • GKNJPUT(X%, Y%, C$)
    • 文字を描画、1文字専用
    • 描画した文字を返す
  • GKNJPRINTAA X%, Y%, S$
    • アンチエイリアスをかけて文字列を描画する
    • 低速 & エフェクト使用不可
  • GKNJPUTAA(X%, Y%, C$)
    • アンチエイリアスをかけて文字を描画、1文字専用
    • 描画した文字を返す
  • GKNJW()GKNJH()
    • 1文字の幅・高さを取得

サブセット化ツールについて

フォントデータはこのままではとても大きいので、フォントをサブセット化するツール「KNJLIB_SUBTOOL」が含まれています。サブセット化とは、フォントデータから自分のプログラムで使いたい文字だけを選んで抽出することです。決まったメッセージしか表示しない場合は、これにより大幅にサイズを小さくできます。

「KNJLIB_SUBTOOL」を開き、フォントデータの指定、および抽出する文字の指定をプログラムを直接書き換える事で行います。抽出する文字は重複したものは自動で省くので、ゲーム中で使用する文章をそのまま渡しても構いません。実行すると、漢字ライブラリの命令にデータを渡すプログラムの形式で、サブセット化されたフォントデータが生成されます。

フォントデータのライセンスについて

ライブラリに添付されているフォントデータ (KNJLIB_FONTS1~5) はさまざまな方の手によって作られたもので、それぞれにライセンス (使用条件) があります。

ナガ10」というフォントは、非営利 (つまり通常のプチコン作品など) での利用には「何の制限もありません」が、営利目的の場合は作者のかたに相談 (連絡) する必要があります。しかも、このフォントを配布しているサイトの最終更新は15年前であり、現在は連絡先が無効となっており、連絡できません。したがって、プチコンマガジンなど、販売される機会がある場合は、ライブラリ内蔵の「M+ BITMAP FONTS 10」(GKNJFONT 4 で使える) に置き換えるなどしてください。

その他のフォントデータのライセンスは、以下のいずれかに該当します。どれに該当するかは、フォントデータの前にコメントで記載しています。

  • パブリックドメイン … 制作者により著作権の放棄、および一切の権利を行使しないことが宣言されているため、無条件で自由に使えます。
  • M+ FONTS LICENSE … 著作権は制作者が保持していますが、制約なしに自由に使って OK とされています。
  • SIL Open Font License 1.1 … ライセンス本文ではいくつかの条件が挙げられていますが、プチコンのプログラムに組み込んで使う分には特に気にすることはなく、自由に使えます。ライセンスを厳密に解釈すると、使用の際、フォントデータの前にある著作権表示と「SILオープンライセンス」と書かれたコメントを、フォントデータとセットでプログラムにコピーしておくとより好ましいと思われます。
  • 「jiskan16」「jiskan24」の半角文字 … ソニーに著作権がありますが、自由に使えます。フォントデータをコピーする際は、データの前にある「Copyright 1989 by Sony ~」で始まるコメント1行も一緒にコピーしておいたほうが良いようです。

また、自家製ドットフォントシリーズのうち、「ぱうフォント」と「恵梨沙フォント」は使用条件的に扱いづらいため含んでいません。それ以外は全部プチコン向けにコンバートしたデータがプロジェクト内に入っています。

スクリーンショット・動画

公開キー

プチコン3号用の公開キーです。トップメニューの「作品公開とダウンロード」から公開キーを入力すると、作品をダウンロードすることができます。

プチコン3号/BIG 公開キー
AD435D

CHECKER FLAG (ひとことコメント)

この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)

  • 名無しさん : 怒涛の46種類! (2015/07/02 (木) 21:34:31)
  • hnakai : GKNJPRINTAA(アンチエイリアス漢字描画)でASCII文字以外の漢字やひらがなが描画できないようです。 (2015/07/05 (日) 16:36:01)
  • プチコンまとめWiki管理人 : サンプルの通り「日比谷32」フォントでは描画できているので、フォントによるかもしれません。M+10/M+12のように縦か横のサイズ奇数だとエラーが出ます。それ以外にうまく動かない場合はそのフォントを教えてください。 (2015/07/09 (木) 00:07:33)
  • MORIBU : これは素晴らしい!ありがたく使わせて下さい。 (2015/07/12 (日) 17:36:34)
  • プチコンまとめWiki管理人 : どうぞご活用ください! どんな作品に使われるか楽しみにしてます! (2015/07/14 (火) 09:37:16)
  • yuy@ : 事後報告となってしまいましたが、お借りしてこのようなプログラムを作らせていただきました。ありがとうございます! (2015/08/09 (日) 15:58:26)
  • スー : すごく便利ですありがとうございます!( ´ ▽ ` )ノ ところで確信は持てないのですけれど、KNJLIBの116行目、KNJTBL_TABLEDIRTY%って、KNJLIB_TABLEDIRTY%のことでしょうか?(・д・) (2015/10/24 (土) 02:21:26)
  • スー : 追加なのですけれど、316行目のW*Hは、W%*H%かもしれません。また、VARで定義されていないローカル変数っぽいものが少しありました。OPTION STRICTを付けたプログラムに必要そうな部分だけコピペしてみたらエラーが出て、先ほど挙げたところを変えたらなんだか動くようになりましたので、一応ご報告だけ(・u・) (2015/10/24 (土) 02:43:49)
  • スー : すみません!さらになのですけれど、332,349行目の色が#BLACK固定になっているので、エフェクトの色が反映されていない気がしました。そこをKNJLIB_EFFCOLOR%に変えたら反映されるようになったみたいです(u_u) (2015/10/24 (土) 03:06:31)
  • natto- : 怒涛の公開キー6文字! (2015/10/24 (土) 10:08:57)
  • プチコンまとめWiki管理人 : スーさんごめんなさい、書き込みに今更気づきました。ご指摘いただいた点確認してみますね。ありがとうございます! (2015/11/25 (水) 13:01:36)
  • まげ : 拙作「プチコロボの戦い」で使わせていただいたことを報告いたします。ありがとうございました。 (2016/01/25 (月) 21:47:45)
  • カービィ★KIRBY : Miiverseのコメントにも書き込んでおいてあるのですが、これのフォントデータの構造がどのようになってるのかしっかり知りたいです。 簡単にコンバート出来るなら自分用にコンバートして使いたいのですが。 (2016/03/26 (土) 14:28:09)
  • 名無しさん : これって美咲フォントですか? (2016/04/16 (土) 16:52:54)
  • プチコンまとめWiki管理人 : 非常に遅い返信申し訳ありませんが、美咲フォント「も」入ってます。 (2016/07/11 (月) 21:20:59)
  • プチコンまとめWiki管理人 : カービィ★KIRBYさんの質問の件、いまさらながらご本人に直接回答を差し上げましたが、気がむいたらWikiにも書きます。 (2016/08/02 (火) 21:41:01)
  • 直斗 : 管理人さんの漢字ライブラリー綺麗で凄いいいですそれに薬草など色々なアイテムのコメントが面白いです! (2016/11/05 (土) 23:08:30)
  • 天郷思音 : サブセットツールで作ったデータを使って表示すると文字化けが発生する?なんでだろう (2018/03/17 (土) 21:05:03)
  • 天郷思音 : 正しくないテーブルが生成される…? (2018/03/17 (土) 21:16:58)
  • 天郷思音 : SUBSET$に特定の文字が入ると生成されるテーブルがずれる模様です。CHR$(10)や一部の半角記号です。AKCNV$()を通してるにもかかわらずダメなようです。仕様なのかバグなのか… (2018/03/17 (土) 21:30:12)
  • あいうえお : ごめんなさい。とても初歩的な質問何ですが、LOCATEで文字の表示位置を設定したいとき何処にLOCATEを打てば良いのですか?色々試したんですが、反映されなかったりエラーになります。何しろコード書くのが初めてに等しいのでよくわかりません。 教えて貰えると嬉しいです。 (2019/01/19 (土) 14:11:38)
  • はる : LOCATEはコンソールの文字の座標を指定する命令なのでLOCATEでは指定できません。 (2019/01/19 (土) 15:25:05)
  • RF-4E : INPUTの案内文でこのフォントを使いたいのですが無理ですかね…? (2019/12/22 (日) 22:07:59)
  • Na : OPTION STRICTのプログラムの後ろにコピーして使うとエラーになります (2019/12/22 (日) 22:56:31)
  • Na : と思ったけど上の方に同じ報告がありましたね (2019/12/22 (日) 22:57:22)
  • Na : RF-4Eさん 無理そうです。INKEY$を使って自分で作るしかないと思います。 (2019/12/22 (日) 22:58:11)
  • F-4EJ改 PhantomⅡ : なるほど。ありがとうございます。INKEY調べてみます (2019/12/23 (月) 20:08:53)