Hatena::ブログ(Diary)

senzogawaのNな日々 このページをアンテナに追加 RSSフィード

2004 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2011 | 01 | 03 | 04 | 05 | 06 |
2012 | 01 | 08 | 09 |
2013 | 02 |

2006-06-20 ふぉんとえらぶ

続フォントプラグインラッパ

| 続フォントプラグインラッパを含むブックマーク 続フォントプラグインラッパのブックマークコメント

 ラッパ自体は先日(id:senzogawa:20060611#p1)公開したものから変更してないが、アーカイブの中身に、フォント選択画面のサンプルを追加した。

 即興で作ったので、ラッパそのものと比べると全く汎用的ではないけど、多少わかりやすくはなると思う。


 作ってみてふと気づいたが、この用途だと、fontext_find の命令は不要だ。

 一覧化して、選択してもらったら反映してしまうので、フォント番号はその場限りでいい。

 ただ、システム側でフォントを決めたい場合には有用。のはず。

トラックバック - http://d.hatena.ne.jp/senzogawa/20060620

2006-06-11 ふぉんとにどうも

フォントプラグインラッパ

| フォントプラグインラッパを含むブックマーク フォントプラグインラッパのブックマークコメント

 先日(id:senzogawa:20060606#p1)、フォントに関して、きちんとラッピングした方がいいと書いたのだが、実際にフォントプラグインのラッパを作ってみたので、公開しておく。

 http://senzogawa.s90.xrea.com/dl/fontext_wrapper.zip


 そんな大したことをやってるわけではないけど、番号管理をしたかったので、フォント番号を取得する命令、fontext_find を作っておいた。

 インストールされてるフォントが多いと時間がかかると思われるので、最初に呼んでおく必要があるだろう。


 これは非常に薄いラッピングなので、実際使う場合には、作成対象のアプリケーション用に、もう一段階のラッピングを仕掛けようと思っている。

 例えば、システム用とシナリオ用で別モジュールに分ける、とか。

ちびころちびころ 2006/06/20 02:10 はじめまして!!
フリーゲームを試しにプレイし、右クリックでシステムカスタマイズ画面を呼び出し、そこに表示フォントを選択するシステムか組み込まれていて、こんなこともできるんだ!っと感動。
 Nscripterにおいて、上に表示されるメニューバーの部分がすっきりされるので、右クリックで表示されるシステムカスタマイズのところにフォント選択も盛り込もうかなと思ったのですが…そのフリーゲームは吉里吉里作成でした…(涙)。

 Nscripterではできないのかな?と思いまして探しておりましたところ、こちらのサイトさまにたどり着きました。
 早速サンプルのフォント関連のをダウンロードさせていただいたのですが、line2にエラーと表示されてしまいます。
 まだNscripterはどういうことができるのかな?と試しているくらいの人間なので、エラー原因がつかめません…。
差し支えなければアドバイスいただけませんでしょうか?
 ずうずうしいお願いで申し訳ありません。

ちびころちびころ 2006/06/20 03:30 色々と試みまして…
ダウンロードしてまいりましたファイルを
fonttext_wrapper
├sample.ttf
  ├nscr.exe
  ├fontext.dll
├fontext.asm
  ├01.txt(適切な「番号.txt」に変更したもの)
  └00.txt
としました。
 起動させたところ

「exec_dllのDLL指定が不正です。
01.txt line36
*fontext_count
getparam i%fontext_arg1
exec_dll FONTEXT_DLL_DIR」
 
 とでます。
 間違いをご指摘いただければと思います。。

とおりすがりとおりすがり 2006/06/20 21:00 NScripter Ver2.67未満では文字列を+で連結できません。最新版で是非。

# それはそうと、フォントが多いと列挙時、行数オーバーでエラーに……。

senzogawasenzogawa 2006/06/20 22:18 >ちびころ さん
はじめまして。
惜しいところまではいってますね。
エラーからすると、ファイル名指定不正なので、
とおりすがりさんの指摘通り、最新版のNScripterで試してみてください。
もしどうしてもうまくいかなかったら、「FONTEXT_DLL_DIR+”¥fontext.dll」の部分を、「”fontext.dll」としてみてください。
ちなみに「fontext.asm」は無くても大丈夫です。
>とおりすがり さん
回答ありがとうございます。
フォントが多いときの対応は、ページ切り替え可能にして対応することを想定してました。
簡単にやるなら特定の個数までしか表示しないようにするのが良いかな、と。

ちびころちびころ 2006/06/21 02:49 Senzogawaさま、不躾な質問に対し、大変ご丁寧にご解説いただき、またすぐにお教えくださり本当にありがとうございました!
 早速最新に入れ替えました。
 無事に表示することができましたこと、ご報告させていただきます。
 ありがとうございました!

とおりすがりさま。
 お教えくださりありがとうございました。
 ずっと迷い続けるところでした(^_^;)。

コチラのサイト様を参考にさせていただきたくお気に入りに登録させていただきました♪サンプルなど参考にさせていただきたく思います。

トラックバック - http://d.hatena.ne.jp/senzogawa/20060611

2006-06-09 なぜかDの日

つまらないテキストでも消えるのは辛い

| つまらないテキストでも消えるのは辛いを含むブックマーク つまらないテキストでも消えるのは辛いのブックマークコメント

 D言語Doxygenについて、それなりにちゃんと書いたんだけど、内容が全部吹っ飛んだ。

 バックアップが無効になってたことに気づかなかったので、コピーとってなかった。

 自分で設定を変えた覚えはないんだけどなあ。


 そもそもバックアップ設定って最初からあったっけ。

 いや、もうそんなことはどうでもいい。消えたテキストは帰ってこない。


 やはり、自分でバックアップする方が確実だな。

 自動バックアップ機能なんて嫌いだ。

 プレビュー時に勝手にバックアップしてくれれば良かったのに。

D言語にDoxygenを使う

| D言語にDoxygenを使うを含むブックマーク D言語にDoxygenを使うのブックマークコメント

 以前(id:senzogawa:20050728#p1)、ぶちあたって放置していた文字コードの問題が解決できた。

 ちゃんとまとめて書いたんだけど、消えたら面倒になったので、簡単に書くことにする。

 DMDで以下のコードをコンパイルして実行ファイルを作り、DoxygenのINPUT_FILTERにその実行ファイルへのパスを指定すればいい。

 DMDDoxygenのバージョンは最新版を用いた方が確実。

import std.file;

int main(char[][] args)
{
	printf("%s", toMBSz(cast(char[])read(args[1])));
	return 0;
}

 単に、UTF-8で記述されたファイルの内容をShift_JISに変換して標準出力に吐き出しているだけだが、D言語ならこうも簡単に書ける、ということを言いたかった。

 こんなのD言語使ってる人は知ってるかな。


 ちなみに、ファイル名はDoxygenから渡されることから、異常系は考慮してない。

 汎用的に使うなら異常系の処理も書くべき。

トラックバック - http://d.hatena.ne.jp/senzogawa/20060609

2006-06-06 今度こそ

フォント管理

| フォント管理を含むブックマーク フォント管理のブックマークコメント

 昨日(id:senzogawa:20060605)、自業自得ではあるが、君影草工房さんのフォントプラグインに関して恥ずかしい間違いを書いてしまった悔しさをバネに、今度はきちんとした内容のものを書きたい。


 具体的には、ユーザに好みのフォントを選択してもらう方法と、それから、やはりフォントを番号管理したいので、フォント名からフォント番号を取得する方法についてと、あとはその他の注意点について少し書いておく。


ユーザに好みのフォントを選択してもらう方法

 ユーザに好みのフォントを選択してもらうためには、以下のような手順を踏めばよい。

  1. 今あるフォントを全て表示する。
  2. ユーザの選択を待つ。
  3. 選択されたフォントを設定する。

 実際のスクリプトは以下の通り。

; 今あるフォントを全て表示する。
btndef clear
exec_dll "fontext.dll/List"
getret %0
for %1=0 to %0-1
	itoa $1,%1
	exec_dll "fontext.dll/Get,"+$1
	getret $1
	exec_dll "fontext.dll/ToMB,"+$1
	getret $1
	lsp %1,":s/20,20,0;#ffffff#ccccff"+$1,0,%1*20
	spbtn %1,%1+1
next
; ユーザの選択を待つ。
*waitloop
btnwait %1
if %1<=0 goto *waitloop
csp -1
print 1
; 選択されたフォントを設定する。
itoa $1,%1-1
exec_dll "fontext.dll/Get,"+$1
getret $1
font $1 : textclear

 かなり雑だが、流れはわかると思う。

 ここでの注意点としては、フォント名は半角のことがあるため、全角にしておくことと、選択させたいフォントがあれば、事前にインストールしておくこと。

 あとは、textclear を忘れなければ、ちゃんと表示に反映される。


フォント名からフォント番号を取得する方法

 フォント名からフォント番号を取得する方法に関しては、要は列挙ができるのだから、インストール後に比較していけば、番号を取得できる。

 以下の通りだ。

; フォント名から番号を取得する。
exec_dll "fontext.dll/List"
getret %0
mov $10,"対象フォント名"
mov %10,-1 ; フォント番号
for %1=0 to %0
	itoa $1,%1
	exec_dll "fontext.dll/Get,"+$1
	getret $1
	if $1==$10 mov %10,%1 : break
next

 番号を取得してしまえば、配列変数で管理できる。

 配列変数の1次元目をキャラクタ番号、2次元目を感情とかにして、台詞に応じてフォントを切り替えられるようにする、なんて手も使えるので、メリットがある時は迷わず実装していいと思う。


その他の注意点

 ロード時のことだが、プラグインを使った場合、ロード時に自動では復帰してくれないため、一時インストールのフォントも、基本的には復帰してくれない。

 したがって、loadgosubを使って適切に復帰させる必要がある。


 そのためにはプレイ中のフォントを変数で保持しておかなければならないが、これについては、通常のパラメータなどと一緒で、NScripterで言うローカル変数の、特定の変数番号に保持させておけばいい。


 あとは、フォントインストール時に、同じフォント名で別のファイルを指定してしまうと、どちらかわからなくなったりするとか、異常なケースくらいだろうか。

 そんなに注意を払う必要は無いと思う。


 以上。今度はちゃんと試したスクリプトなので、問題は無い。はず。

 実装例ということでプラグインの呼び出しをベタで書いているけど、本当はきちんとラッピングした方がいい。

トラックバック - http://d.hatena.ne.jp/senzogawa/20060606

2006-06-05 ふぉんとにもう

フォント関係のプラグイン

| フォント関係のプラグインを含むブックマーク フォント関係のプラグインのブックマークコメント

 こちら(no title)でフォント関係のプラグインが公開された。

 機能としては、フォントの一時インストールや、番号での管理ができる。


 ちょうど、spfont命令の機能が向上したのでスプライト文字列のフォントを切り替えるようにしたかったが、ユーザにフォントのインストールを迫るのは嫌だったので、どうしようかと迷っていたところだった。助かるなあ。


 基本的には、以下のように使えばいいのではないだろうか。

;// 例1)フォントを一時インストールしない場合
; フォント名で、フォントを検索
exec_dll "fontext.dll/List,えぬすくようさんぷるふぉんと"
getret %0
; フォントがあれば、その番号を保持。無ければ、代替の番号にする。
if %0 > 0 mov %100,%0 : skip 2
          mov %100,0
; 番号からフォント名を取得
itoa $100,%100
exec_dll "fontext.dll/Get,"+$100
getret $0
; font命令で指定
font $0

;// 例2)フォントを一時インストールする場合
; フォント名で、フォントを検索
exec_dll "fontext.dll/List,えぬすくようさんぷるふぉんと"
getret %0
; フォントがあれば、その番号を保持。無ければ、インストールする。
if %0 > 0 mov %100,%0 : skip 4
          exec_dll "fontext.dll/Add,sample.ttf"
          exec_dll "fontext.dll/List,えぬすくようさんぷるふぉんと"
          getret %100
; 番号からフォント名を取得
itoa $100,%100
exec_dll "fontext.dll/Get,"+$100
getret $0
; font命令で指定
font $0
; 別のフォントに切り替えたら消しておく。
font "MS ゴシック"
exec_dll "fontext.dll/Del,sample.ttf"

 無ければ無いでいいなら例1、どうしても使いたいなら例2というところだろう。

 フォント番号は存在確認だけの用途として、管理はフォント名を使っても問題は無いけど、文字列より数値の方が何かと応用しやすいので、多種類使う場合は、番号管理の方が良いと思う。


 (追記)

 ちゃんと試してなかったけど、試してみたら、"fontext.dll/List,"でフォント番号なんてかえってこない・・・Readmeによるとフォント数らしい。

 よって、フォント名管理にした方がいいです。

 嘘つきですみません。

投槍

| 投槍を含むブックマーク 投槍のブックマークコメント

 マネージャが気合を入れてみたところで、事態が好転するどころか、さらに悪化していく様は、なかなかに滑稽だ。

 作業時間を増やす方向に舵を取ってしまっては、よくなるものもよくならないのだが、わかっていればそもそもこういうことにはならない気もする。


 自分は脱出を決め込んでいるので無責任なものだが、一時的にだとしても、仲間である人達のことを思うと、少しやりきれない。

 助けようにも、自分のモチベーションを最低のところで維持するのが手一杯になってしまった。


 せっかく休みで蓄えた気力は、どうやら早くも使い果たしたらしい。

 自分の作業だけやって、とっとと帰ってくることにした。我ながら薄情者だ。

トラックバック - http://d.hatena.ne.jp/senzogawa/20060605