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 |

2004-11-30 初心者講座第6回

システム1

| システム1を含むブックマーク システム1のブックマークコメント

はじめに

 前回までで、タイトル→シナリオ→エンディングという一連の流れを説明した。

 今回は、セーブ、ロードなどのシステム面について実装する。

定義ブロックと実行ブロック

 先に説明しておくと、定義ブロックは「*defne」から「game」までの間の記述のことで、このブロックでの処理は、基本的に「2回は呼ばれない処理」だ。実行ブロックは「*start」以降の処理。

 今までは、意図的に定義ブロックの処理を記述していなかったが、システムを触る場合には、むしろ定義ブロックの方が重要になると思う。

右クリックメニューの実装

 NScripterでは、セーブ・ロードなどの機能を「右クリックメニュー」で簡単に実現できる。

 右クリックメニューとは、「\」,「@」,「select」の命令でユーザ入力待ちが発生した場合に、右クリックを受け取るとメニューを出す機能だ。

 具体的には定義ブロックで以下のように書く。

rmenu "セーブ",save,"ロード",load,"回想",lookback,"選択肢まで進む",skip,"ウィンドウを消す",windowerase,"タイトルに戻る",reset,"ゲームを終了する",end

 記述を説明すると、「rmenu」は右クリックメニュー設定の命令で、半角スペースを挟んで後ろに続くのは、「メニューで表示する文字列」,「実現する機能」という内容だ。

 これで、表示文字列に書いてある通りの機能が実装できる。ちなみに、古いものでは実装されていなかったが、現在では「reset」と「end」はユーザ確認をとってくれるので、安心して使える。

 一応だが、上記の表示文字列と実現機能のセット全てを記述する必要は無い。

右クリックメニューの制御

 以上のように実装そのものは簡単だ。ただし、セーブされると困る場合など、制御を考慮する場面がある。

 制御する対象は3つ。

  1. 右クリックメニューを有効とするかしないか
    これは、演出上、通常の進行のみを期待する場合に「rmode 0」とし、再び許可する場合に「rmode 1」とする。キャラクタ紹介など、シナリオ以外の場面でテキスト表示する場合に使う。
  2. セーブデータに含めるか含めないか
    「saveoff」とすると、その後「saveon」するまで、進行してもデータを保持しない。演出で重たい処理を行う際に、開始前にsaveoff、終了後にsaveonを行う、というのがマニュアルで提示されている使い方で、実際、そのように使う。
  3. バックログに含めるか含めないか
    「lookbackoff」、「lookbackon」があるが、データがバックログというだけで、「saveoff」、「saveon」と同様だ。使用場面は「rmode」と同様。ちなみに「reset」を呼ぶとバックログは消去される。

その他の右クリックメニュー関連命令

 デフォルトの右クリックメニューだと、見栄えがゲーム内容と合わない場合は、「menusetwindow」と「menuselectcolor」を使う。

 使い方はマニュアルを参照。デフォルトではおそらくだが、「menusetwindow 26,26,0,2,0,0,#999999」、「menuselectcolor #ffffff,#aaaaaa,#555599」と思う。

 このほか、セーブ数などについては、高橋氏のHPからダウンロードできる「NScripter辞書」の、「右クリック機能設定」以下のカテゴリの命令を参考にするといい。黄色の背景の命令が定義ブロック命令であることに注意さえすれば、難しくはないと思う。

カーソル画像

 クリック待ちや回想時のカーソル画像については、「nsce.lzh」を解凍した時にできる「デフォルトのカーソルファイル」というフォルダ内にある画像を、exeと同じところにおけばいい。

 もし、別フォルダにおきたい時は、例えば「cursor」という名前のフォルダの場合、以下のように命令を書く必要がある。

; 回想時のカーソル指定
lookbackbutton "cursor/uoncur.bmp","cursor/uoffcur.bmp","cursor/doncur.bmp","cursor/doffcur.bmp"
; クリック待ちのカーソル指定
setcursor 0,":l/3,60,2;cursor/cursor0.bmp",0,0
setcursor 1,":l/3,60,2;cursor/cursor1.bmp",0,0

 「lookbackbutton」は定義ブロック命令だが、「setcursor」は実行ブロック命令なので注意。

 以上。今回はコーディングについては書くような内容が無い。

 この程度だと、はっきり言ってマニュアルやサンプルなどを見た方が早いと思う。

-----今回書いたこと-----

・定義ブロックは「*defne」から「game」までの間

・右クリックメニューは「rmenu」で実装する

・場合によっては、右クリックメニューを制御する

・右クリックメニューの見栄えは「menusetwindow」と「menuselectcolor」で変更できる

・カーソル画像は「デフォルトのカーソルファイル」フォルダ内にある

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

2004-11-27 遅くなりぎみ・・・

ファイル管理の方法

| ファイル管理の方法を含むブックマーク ファイル管理の方法のブックマークコメント

 NScripterIDEとかが無いし、実行用のスクリプトファイル名が決まっているので、ファイル管理がしにくい。

 これを少しでも解消するため、次のような2つの対策を行っているので、TIPSとして紹介することにした。

シナリオとシステムの分離

 まず、シナリオとシステムで、使うファイル番号を分離した。

 具体的には、00.txtにはスタート部分のみ記述しておき、01〜50.txtをシナリオ、51〜99.txtをシステムとした。

 ちなみに、ここで言っているシナリオのファイルというのは、実際に表示する文章が書かれているファイルのことで、システムのファイルというのは、ライブラリ的なルーチン群や、システムカスタマイズ部分を記述したファイルのこと。

 

 こうしてもNScripterは00〜99.txtなら飛び飛びでも読み込んでくれるので、実行的な問題はでない。

 これをやっておくと、シナリオの追加などで、

・01〜10.txt:シナリオ

・11〜12.txt:システム

・13〜15.txt:シナリオ

 のように、ごちゃまぜになったりしないので、修正時に混乱しにくい。

リネーム

 次に、編集するファイル名と、実行ファイル名をリネームにより、わかりやすくした。

 具体的には、シナリオは ソフト名+番号.txt とし、システムは 機能名.txt のようにし、編集時には編集用のファイル名にする.batファイルを使い、実行時には実行用のファイル名にする.batファイルを使った。

 ちなみに.batファイルは以下のような内容。

rem toedit.bat 編集用にする
rename 01.txt ソフト名01.txt
rename 02.txt ソフト名02.txt
rename 50.txt システムコア.txt
rename 51.txt セーブロード.txt
rem toexe.bat 実行用にする
rename ソフト名01.txt 01.txt
rename ソフト名02.txt 02.txt
rename システムコア.txt 50.txt
rename セーブロード.txt 51.txt

 こうしておくと、編集するときにどのファイルがどの内容だったかを判断しやすい。番号のままだと非常に辛いので。

 実行ファイルと編集ファイルを別フォルダにしているのであれば、renameではなく、copy /Y を使って、単に実行ファイル名にするだけでもいいかもしれない。

 以上のようにファイル名に気をつけるだけでも、何もしないよりは多少ファイル管理は楽になると思う。

我ハ悪ノ化身ナリ

| 我ハ悪ノ化身ナリを含むブックマーク 我ハ悪ノ化身ナリのブックマークコメント

 id:eiji8pou:20041126#1101481038を見て、面白そうなのでhttp://d.hatena.ne.jp/senzogawa/で判定してみたら、evil 81%って・・・

 さらに最近取得したサイトの方を調べてみたら、evil 98%・・・・・・

 そんなに俺は悪いのか。

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

2004-11-26 はっ!更新忘れてた!

体験版として

| 体験版としてを含むブックマーク 体験版としてのブックマークコメント

 体験版について、色々と考え、ライターと相談したところ、単純なぶった切りではなく、それなりの終わり方をすることとなった。

 どうなるのかは自分にもわからないが、突然終わるよりマシになることを期待している。

 体験版はあまり力を入れすぎても本編のボリュームが薄い感じを与えてしまうし、かといって面白さを感じさせることができなければお話にならない。ノベルゲームだとシステムで遊ばせることは難しいので、色々と考えてしまう・・・

 ま、結局のところやってもらえなけりゃ何にもならないけど。

リバーシ作ってみた

| リバーシ作ってみたを含むブックマーク リバーシ作ってみたのブックマークコメント

 突如ゲームっぽいものを作りたくなって、リバーシを組んでみた。処理の流れは以下のようにした。といってもリバーシなので、特別なことは何も無いだろう。

  1. 背景を盤面とし、スプライトで石を描く。
  2. プレイヤの場合はclickposで座標を取り、有効性を検証してから石を置き、ひっくり返して盤面を再描画
  3. CPUの場合は有効な場所を抽出してから、ランダムで置き、ひっくり返して画面を再描画
  4. 全部埋まったら終了

 速度を稼ぐため白黒はセルで切り替えるようにしたが、単にランダムで打つだけなのにCPUの思考が異常に長くなってしまった。

 ソースを良く眺めたり、ログをとったりして検証したところ、処理が下手だったため、どの方向に対しても端までチェックをするようなループが出来上がっていただけだった。途中で調べるのを止めるチェック処理を追加したところ、見違えるほど早くなってくれた。

 この分ならCPUの思考ルーチンを強化しても大丈夫そうだが、最適なロジックについて、理解がついていけそうにないのが残念だ・・・でもようやくゲームらしいものを作れるようになったなあ。

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

2004-11-25 TIPS2

ポップアップガイド付きボタン

| ポップアップガイド付きボタンを含むブックマーク ポップアップガイド付きボタンのブックマークコメント

 システムボタンとかで良く使うが、Windows標準のツールチップのように、ポップアップガイド付きのボタンを作ることがある。

 この実装方法はパッケージサンプルでは記述が無いので、今回はその実装について書いてみる。

画像の読み込み

 まず、必要なものは「ボタン用の画像」と「ガイド用の画像」だ。それぞれセルで分ける方法もあるが、文字列スプライトを使うため、個別に画像を作る。

 スクリプトは以下のようになる。

*loadsysbtn
; ボタン用の画像
lsph 0,":s/40,40,0;#ffffff#6666ffセーブ ",0,240
lsph 1,":s/40,40,0;#ffffff#6666ffロード ",160,240
lsph 2,":s/40,40,0;#ffffff#6666ffリセット",320,240
lsph 3,":s/40,40,0;#ffffff#6666ffスキップ",480,240
; ガイド用の画像
lsph 10,":s/40,40,0;#ffffffセーブします",0,200
lsph 11,":s/40,40,0;#ffffffロードします",0,200
lsph 12,":s/40,40,0;#ffffffタイトルに戻ります",0,200
lsph 13,":s/40,40,0;#ffffffスキップします",0,200
return

 ボタン用の画像はセル0が通常時、セル1がカーソル時で、ガイド用の画像はセルを1枚のみとしている。

 これを、シナリオ開始時に呼び、画像を読み込んでおく。クリック待ちカーソルと同様、スプライト番号は注意が必要。ここでは、対応をわかりやすくするため、ボタン画像の番号+10をガイド画像の番号としている。

ボタン画像の表示・非表示

 次に、ボタン画像全体を表示するルーチンと、非表示にするルーチンを作る。

 今回はボタン画像のセル1はカーソル時限定なので、特にセルまで指定する必要は無い。

 こういうときはspstrが大変便利だ。表示のときも、ガイド画像も非表示にする処理を一応入れておく。

*showsysbtn
spstr "p0p1p2p3c10c11c12c13"
return

*hidesysbtn
spstr "c0c1c2c3c10c11c12c13"
return

 上記を必要なときに呼ぶ。特にシナリオ開始時には一度表示ルーチンを呼ぶ必要がある。

 テキストウィンドウと連動させるときは、windowchipの動きが怪しいらしいので、textonとtextoffにこれらを組み込む方がいいかも。

ボタン化

 いよいよボタン化だ。他にボタン化されるものは無いものとしている。

 デフォルト定義は、最初の状態の定義を確実にしておかないと、ボタンから他のボタンへ移った時にガイドが出っ放しになる現象が起こるので注意。

*sysbtn
; デフォルト定義 ガイド画像を非表示
exbtn_d "p0p1p2p3c10c11c12c13"
; ボタン定義 画像のセル1と対応するガイドを表示
exbtn 0,1,"p0,1p10"
exbtn 1,2,"p1,1p11"
exbtn 2,3,"p2,1p12"
exbtn 3,4,"p3,1p13"
return

 上記をtextbtnwaitの前に呼ぶ。ちなみに、ボタンを押された時に、元の表示状態に戻したければ*showsysbtnを呼べばいい。


 以上で完了。多少面倒なだけで難しくは無いと思う。

 画像でやりたい場合はlspでの指定画像を画像ファイルにする。ボタン画像はタグを":l/2,0,3;"("l"は"a","c"でも可)にすると同様の動作でできる。

 まあ結局のところ一番厄介なのは、スプライト番号の管理だったりするけど・・・

 ちなみに、カーソル時画像を別に用意するとアニメーションさせることもできる。アニメーションアイコン自体は、実際に『十小説』で実装している。

タイトルの整理とか

| タイトルの整理とかを含むブックマーク タイトルの整理とかのブックマークコメント

 どうも長いカテゴリ名が多かったので、必要最小限の長さにしてみた。やはり長すぎるのは良くない。ちょっとすっきり。

 あと、Firefox入れてみたんだが、自分の日記見てみたらえらいことになっていた・・・

 さすがに重なってしまうのはまずいので、Firefox向けに修正した。本文の部分に"float:left"を適用しただけだが。CSSのいじり方が悪いんだろうけど、まあいいや。

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

2004-11-24 初心者講座第5回

エンディング1

| エンディング1を含むブックマーク エンディング1のブックマークコメント

はじめに

 今までに作成した部分は、「タイトル→シナリオ」だけだが、これで充分ゲームにならなくはない。スタートしさえすれば、あとは「シーン→選択→シーン・・・」を繰り返し、誤った選択をすればバッドエンド、うまくいけば全部のシーンを見ることができる、という形だ。

 だが、やはりゲームである以上、エンディングはあるべきだ。ただ提示された選択肢を選ぶだけでも、「クリアした」という達成感は欲しいものだ。

 というわけで、今回はエンディングを作る。といっても、例によって深くは作らず、単純にスタッフを表示するだけ、というものにする。

用意する素材

 今回はNScripterの機能「文字列スプライト」というものを利用するので、特に素材は用意する必要は無い。

 エンディング用の背景が欲しければ用意してもいいと思うが、背景が真っ暗な方が楽な選択だし、スタッフの名前も映える。

事前説明

 大体のイメージを掴んでおく必要があるので、先に処理流れを説明する。

  1. 音楽を止め、背景を暗くする
  2. スタッフの役職と名前を画面中央に表示する
  3. 少し待って消す
  4. 少し待って今度は画面中央に"Thank you for playing!"と表示する
  5. クリックされるか、1分経過したらタイトル画面に戻る

コーディング

 では、実際のコーディングに入る。前回の「*ending」の部分からのみ記述する。

*ending
textoff
goto *staffroll

*staffroll
; 音楽を止め、背景を暗くする
stop
cl a,0
bg black,10,1000
; スタッフの役職と名前を画面中央に表示する
lsp 0,":s/24,24,0;#ffffff役職 スタッフ名",(640-8*24)/2,(480-24)/2
print 10,1000
; 少し待って消す
wait 1000
csp 0
print 10,1000
; 少し待って今度は画面中央に"Thank you for playing!"と表示する
wait 1000
lsp 0,":s/24,24,0;#ffffffThank you for playing!",(640-11*24)/2,(480-24)/2
print 10,1000
; クリックされるか、1分経過したらタイトル画面に戻る
delay 60*1000
csp 0
reset

記述の説明

 まず、「lsp」だが、これは「スプライト画像」を読み込む命令だ(表記はおそらく「load sprite」の略称)。

 「スプライト画像」については後で説明するが、画面に反映するためにはprint命令が必須で、最初に「スプライト番号」、次に読み込み対象、そして表示する左上座標という順に指定する。

 座標については、画像が画面の中央となるように計算している。これも具体的な説明は後で。

 次に、「wait」は指定時間待つ命令で、ミリ秒単位で指定する。

 「delay」も「wait」と同様に待つ命令だが、ユーザの入力で待つのを止める。場合によって使い分けるといい。

 また、これらのようなミリ秒指定は、秒数で指定したければ「秒数*1000」とすると、わかりやすい。

 「csp」はスプライト画像を削除する命令だ(表記はおそらく「clear sprite」の略称)。最初に記述している数字は「lsp」と同様「スプライト番号」だ。こちらも画面に反映するためにprint命令が必要。

 「reset」は「*start」から再開してくれる命令だ。前回バッドエンドで「end」を使ったが、本当はこちらを使う。

スプライト画像

 「スプライト画像」は、NScripterの場合、特に用途を特定しない単なる画像のことを指していて、画像ごとに表示位置を座標で指定することができる。

 「bg」や「ld」と違い表示する命令が付けられいないため、画面に反映させるためにはprint命令が必要だが、これは色々な用途が想定されているためだ。

 具体的には、非表示状態で読み込みのみを先にすませておき、必要な時に表示させる、という使われ方をする。

 なぜそんなことをするのかというと、画像を読み込む、という処理は結構時間のかかる処理であり、場合によっては画面への反映が遅れ、演出の邪魔になるからだ。

 そういったことを防ぐために、この機能が用意されていると思われるが、「文字列スプライト」という機能のおかげで、今回のような用途にも使いやすい。

文字列スプライト

 「文字列スプライト」というのは、その名の通り文字列をスプライト画像にする機能で、これにより画像のように扱える。

 この機能は文字列を書いた画像をいちいち用意する必要が無くなるため、非常に有用だ。

 具体的には、画像を用意するのが面倒な時や、他人に画像を依頼している時などに一時的に使ったり、機能の説明文などの装飾が不要な場合に使う。

 ちなみに、この機能を使うために「lsp」で文字列の前に記述があるが、今回は特に説明しない。

スプライト番号

 「スプライト画像」は先述したとおり、読み込み後に操作することが想定されている。

 その際、いちいちファイル名を指定していては、面倒だし、同じファイルを2つ以上読めない。

 そこで、「スプライト画像」ごとに「スプライト番号」を使って操作する。実際に、表示状態、座標、透過度を操作する命令がある。

 重なり順序があるので、本来は安易に番号を付けないようにするが、まだ必要ない。

画像の画面中央合わせ

 ちょっと大げさだが、座標の計算式については、次のように導き出している(幅は縦でも横でも計算式は同じ)。

 画面中央の座標 - 画像幅の半分

  = 画面幅の半分 - (文字長 * 文字幅)の半分

  = (画面幅 - (文字長 * 文字幅))の半分

 今回は以上。

-----今回書いたこと-----

・「wait」と「delay」を使い分ける

・「スプライト画像」はprint命令無しでは画面に反映されない

・「文字列スプライト」は便利

・「スプライト番号」は「スプライト画像」と対応する番号

・画像を画面中央に合わせる時は決まった計算式を使えばいい

かなでかなで 2009/05/24 21:43 またかなでです。…頻繁にすみません;
スタッフロールですが、一度に一行しか表示されないのでしょうか?
一度の画面に2、3行書きたいんですが…
一ページに一行だけだと、なんだか画面が忙しくて…;
もしよろしかったら教えてください!

senzogawasenzogawa 2009/05/25 01:24 かなでさん、どうもです。
一度に一行というのはスタッフ名のところと思いますが、複数行表示したい場合は、lspに渡すスプライト番号をそれぞれの行ごとに用意して、文字列スプライトを増やす形になります。
具体的には、以下のようになります。

; スタッフの役職と名前を3行画面中央に1行あけて表示する
mov $0,"役職1 スタッフ名1":len %0,$0
lsp 0,":s/24,24,0;#ffffff"+$0,(640-%0/2*24)/2,(480-24*5)/2
mov $0,"役職2 スタッフ名2":len %0,$0
lsp 1,":s/24,24,0;#ffffff"+$0,(640-%0/2*24)/2,(480-24*5)/2+24*2
mov $0,"役職3 スタッフ名3":len %0,$0
lsp 2,":s/24,24,0;#ffffff"+$0,(640-%0/2*24)/2,(480-24*5)/2+24*4
print 10,1000
; 少し待って消す
wait 1000
csp 0
csp 1
csp 2

かなでかなで 2009/05/25 11:51 詳しく説明して下さってありがとうございます!
もうこんなにしつこく質問するのはこれで最後にしたいですね…;
どうも有難うございましたorz

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

2004-11-23 よくやるなあ

NScripterでリズムアクションゲーム

| NScripterでリズムアクションゲームを含むブックマーク NScripterでリズムアクションゲームのブックマークコメント

 何やらすごいという評判の体験版ソフトがあったので、見てみた。『君影草工房』さんhttp://popup12.tok2.com/home2/kimikage/の公開DLLを使った、『バスト ア ムーブ』に似たリズムアクションゲームだった。判定のタイミングが微妙にわかりづらいが、なかなか良い。

 おそらく、DLLでキーを取得し、取得できたら取得した時点での画像の種類と位置を比較して判定しているのだろう。他にDLLを使っている形跡は無いので、システムは全部スクリプトで構築したようだ。

 ちなみに、『さんだーぼると』という成人向けソフトメーカーさんの作品なので、サイトへのリンクは貼らない。

エディタ

| エディタを含むブックマーク エディタのブックマークコメント

 開発環境というのは、結構重要だと思う。『弘法筆を選ばず』とは言うが、これは、優れた人は道具が悪くてもそれなりに出来る、ということだろう。悪い環境でも良いものを作れなければならない、という意味ではない。特に自分のような凡人の場合は、良いツールに助けてもらわないと辛いものがある。

 というわけで、今ちょっと開発環境の整備をしている。といっても、NScripterIDEを作ってるとか大それたことではなくて、単にエディタを選んで設定をいじっているだけだけど。

サクラエディタのダウンロード

 今回ターゲットとしたエディタは『サクラエディタ』だ。フリーで使えるエディタで、機能も充実している。以下のサイトの「インストーラ」のリンクから、パッケージ版(sinst1-4-7-0.exe)をダウンロードできる。

http://sakura-editor.sourceforge.net/

インストール

 で、使い方だが、普段は他のエディタを使いたい人向けに説明する。

 まずダウンロードしてきたパッケージを実行すると、インストーラが立ち上がるので、指示に従いインストールする。

 注意点は特に無いので、わからなければ、ひたすら「次へ」ボタンを押していけばいいが、関連付けを行わない場合「SAKURAで開く」は便利なので、チェックすることをお勧めする。

 インストール後「今すぐサクラエディタを起動」がチェックされた状態のウィザードダイアログが表示されるが、以降の設定のため、そのまま起動させていい。

設定

 では、設定についてだが、ここでは強調表示とアウトライン、入力補完、正規表現キーワードについて説明する。

 強調表示というのは、特定のキーワードに色を付けるという、IDEには普通あるものだ。スペリングミスした場合、色が付かないのですぐにわかるというメリットがある。

 アウトラインは、解析によりツリー状に見出しを作ってくれるというものだが、実際に使った方がわかりやすいと思う。

 入力補完は、入力中の語句から候補を自動で抽出してくれるという機能で、これもIDEによくある。まあ、簡単なので入れておいてもいいと思う。

 正規表現キーワードは、特定のルールに従った文字列を強調表示する、という機能。

 今回使うファイルは作成しておいたものがあるので、以下にアップロードしてみた。いずれ消えるので、そのうち別の場所に移す。

 以降、このファイルを解凍してできたファイルのファイル名で説明する。

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

  1. ではまず、スタートアップからでも何でもいいので、「サクラエディタ」を開いて欲しい。既に開いている場合はそれでいい。
  2. 開いたら、設定 > タイプ別設定一覧 を開き、「設定17」〜「設定20」のどれかを選択し、「設定変更」ボタンを押下する。
  3. 変更画面が表示されたら、「設定の名前」に「NScripter」、「ファイル拡張子」に「txt」と入力し、「OK」ボタンを押す。

 以降はこの「NScripter」を用いて設定するが、その前に、ひとつやっておくことがある。

  1. 先ほどと同様、設定 > タイプ別設定一覧 を開き、「テキスト」を選択して、「設定変更」ボタンを押下する。
  2. 変更画面が表示されたら、「ファイル拡張子」の「txt,」を削除して、「OK」ボタンを押す。

 これをやっておかないと、.txtファイルで「テキスト」の設定が反映されてしまう。以上で最初の準備は終了。

強調キーワードの設定
  1. サクラエディタを開いた状態から、 設定 > 共通設定 > 強調キーワード と開き、「セット追加」ボタンを押下する。
  2. 入力用のダイアログボックスが表示されたら、「NScripter」と入力して「OK」を押す。
  3. 次に、「セット名」に「NScripter」と表示されている状態で、「インポート」ボタンを押下し、【NScripter.kwd】を選択する。
  4. 「キーワードの大文字小文字区別」にチェックを入れる。
  5. 同様に、今度は入力用のダイアログボックスで「NScripter2」と入力して「OK」を押す。
  6. 次に、「セット名」に「NScripter」と表示されている状態で、「インポート」ボタンを押下し、【NScripter2.kwd】を選択する。
  7. キーワードが反映されたら「OK」を押して戻る。
  8. 設定 > タイプ別一覧設定 > NScripterを選択し「設定変更」 > カラー を開き、「強調キーワード1」で「NScripter」、「強調キーワード2」で「NScripter2」を選択する。
  9. そのまま、「色指定」のグループで「強調キーワード1」と「強調キーワード2」の「色分け/表示」にチェックがあることを確認する。「太字」などはお好みで。
  10. ついでに、「コメントスタイル」のグループで一番上の「行型」のところに「;」(半角セミコロン)を記入しておき、「OK」を押す。

 以上で完了。試しに、設定 > タイプ別一覧設定 > NScripterを選択し「一時適用」 として、命令をいくつか書いてみるといい。登録されている命令なら文字色が変わるはずだ。色が気に入らない人は、先ほどの「カラー」のところでお好みで設定すればいい。

 ちなみに、以降は.txtファイルを開いた状態であれば、ツールバーの「設定変更」アイコンで設定画面に行けるので、そちらを使った方が早い。

アウトラインルールの設定

 サクラエディタを開いた状態から、設定 > タイプ別一覧設定 > NScripterを選択し「設定変更」 > スクリーン を開き、「アウトライン解析方法」グループで、「ルールファイル」を選択し、近くにあるボタンを押下して、【NScripter_rule.txt】を選択する。選択したファイルが表示されたら「OK」を押して戻る。

 以上で完了。ラベルの記述が多い.txtファイルをサクラエディタで開き、F11キーを押下してみると、ツリー表示されているはずだ。この状態でラベルをダブルクリックすると、その記述箇所に移動できる。

入力補完

 サクラエディタを開いた状態から、設定 > タイプ別一覧設定 > NScripterを選択し「設定変更」 > 支援 を開き、「入力補完機能」グループで、「単語ファイル」の右端にあるボタンを押下して、【NScripter_support.txt】を選択する。選択したファイルが表示されたら「OK」を押して戻る。

 以上で完了。.txtファイルで「a」と入力してCtrl+Spaceを押下すると、「a」から始まる命令一覧が表示されるはずだ。↑↓キーで選んで、→かEnterで決定できる。他のアルファベットも試してみるといい。

正規表現キーワード

 先に書いておくが、正規表現キーワードを使うと結構カラフルになるので、かえって見にくいと思う人は設定しなくてもいいと思う。

 まあ、設定してから使用しなければ同じことなので、とりあえず設定してみるのもいい。

  1. サクラエディタを開いた状態から、設定 > タイプ別一覧設定 > NScripterを選択し「設定変更」 > 正規表現キーワード を開き、「インポート」ボタンを押下して、【NScripter.rkw】を選択する。
  2. 正規表現キーワードを使用する」にチェックを入れる
  3. 「カラー」を開き、「インポート」ボタンを押下して、【NScripter.col】を選択する。

終了

 以上ですべて終了。メモ帳で問題ないという人はともかく、スペリングミスを減らすのに結構効果的なので、サクラエディタではなくとも何らかのエディタを導入することをお勧めする。

 あと、キーワードヘルプというのがあるが、これについてもいずれファイルを用意する・・・かもしれない。

 ちなみに関連付けをしたい場合は、付属の関連付けツールを使うといい。ただし、「.txt」に関連付けすると、readmeなども強調表示が入ってしまうことになるので、あまりお勧めはできない。

SeeSee 2010/08/08 13:04 はじめまして、NScriptを使い始めるのにエディタを導入しようと思い、本記事とreadmeを見て設定させていただきました。
ですが、最新のzipの方と記事でいくつか異なるファイルがあってうまく出来ませんでした。
調べてみたものの、未熟なため対応できずコメントでSOS書かせていただいた次第です。
[支援][正規表現キーワード][キーワードヘルプ]が読み込めなかったり設定しても反応なかったりするのですが、記事の手順だと何か足りなかったりするのでしょうか?
初心者質問で申し訳ありませんが、ご教授願います。

senzogawasenzogawa 2010/10/30 04:01 申し訳ないですが、コメントを見逃してたようです。
今更ながら回答すると、相違のある場合は、当記事ではなく最新のzipに同梱したreadme.txtに従ってください。
それでも駄目な場合は、具体的に「何々を設定して、何々の操作をしても、何々出来ない」というように書いてもらえると、回答します。

NonameNoname 2014/07/07 00:43 はじめまして、See様と同じようにうまく出来ない方がこの記事を読んでいるかもしれない思い、目についてしまったので4年も前のコメントに対して補足になりますが一応書かせて頂きました。【本記事とreadmeの相違】についての補足です。
ここの記事に書かれている強調キーワードの設定の部分の文章を例に取り、最新のzipに同梱されているreadme.txtでの説明に当てはめると下記のような具合になります。
【    [カラー] (を開き)
    強調キーワード1 (は) :NScripter_E.kwd (というファイルを選択してください)
    強調キーワード2 (は) :NScripter_F.kwd (というファイルを選択してください) 】 と言う意味(説明)になります。
なのでここの記事に上記の事を置き換えて当てはめると下記の様になります。
【    強調キーワードの設定
    1,サクラエディタを開いた状態から・・・・・・・
    S
    8.設定 > タイプ別一覧設定 > NScripterを選択し「設定変更」 > カラー を開き、「強調キーワード1」で「NScripter_E.kwd」、「強調キーワード2」で「NScripter_F.kwd」を選択する。】 となります。
こんな感じに置き換えて考えて頂ければSee様の疑問に思った事は解決するかと思います。ちゃんと設定出来ればしっかりと機能がサクラエディタ1.4.7.0Verにおいて正常に動作致しました。無駄な空欄が多く、伝わりにくそうな長文駄文、失礼致しました。

2004-11-22 初心者講座第4回他

シナリオ2

| シナリオ2を含むブックマーク シナリオ2のブックマークコメント

はじめに

 ノベルゲームといえどもゲームというからには、選択ができた方がいいだろう。というわけで、今回は選択肢を作ってみる。

用意する素材

 シーンを切り替えるため、背景画像と立ち絵、BGMをもう一つずつと、今回は「殴る」ので、その効果音を用意して欲しい。効果音は普通WAVEファイルで、フリー素材が数多く公開されているので検索して適当にダウンロードするといい。

コーディング

 では、コーディングに入る。こちらでは、背景画像として「scene2.bmp」、立ち絵として「chara2.bmp」、BGMとして「bgm2.mid」、効果音として「baki.wav」を用意した。早速前回のスクリプトにこれらを組み込んでみる。

; シナリオ開始
*scenario
bg black,10,1000
; 最初のシーン
*scene1
; 背景と立ち絵を読み込んでおく
bg "scene1.bmp",0
ld c,"chara1.bmp",0
; 表示
print 10,1000
bgm "bgm1.mid"
; 文章表示
ここはどこだろう・・・@
見覚えの無い部屋だ。
\
・・・向こうに、誰かいる・・・?
\
; 次のシーンへ移行
cl a,0
stop
textoff
bg black,10,1000
goto *scene2

*scene2
; 背景と立ち絵を読み込んでおく
bg "scene2.bmp",0
ld l,"chara1.bmp",0
ld r,"chara2.bmp",0
; 表示
print 10,1000
bgm "bgm2.mid"
; 文章表示
誰か「よう、やっと見つけたぜ・・・」
; 選択肢
select "相手の顔をじっくり見る",*ending,"いきなり殴る",*badend

*badend
wave "baki.wav"
quake 8,1000
やっちまった・・・@
バッドエンド
click
goto *end

*ending
click
goto *end

 前回のは余りにも説明向けな文章だったので、多少それらしくしておいた。殴るとバッドエンドという、わけのわからないストーリ(?)だが。

 ちなみに、シナリオ開始より下の部分のみ記述している。どういう動作をするのかは長くなるので説明しない。

記述の説明

 まず「cl」は、立ち絵を消去する命令。特定の場所の立ち絵を消せるが、普通、シーンの切り替えでは立ち絵を全消去するので、上記の通り「a」を指定する。

 次に「stop」だが、これはBGMというより、あらゆる音の再生を止める命令で、やはりシーンの切り替えでは呼ぶ方がいい。

 「textoff」はテキストウィンドウを非表示にする。表示する方の命令を記述していないのは、表示文章がある場合、ウィンドウが自動で表示されるためだ。

 そして「select」だが、これが選択肢を出してくれる命令で、見ての通り、選択肢となる文字列とラベルのセットで指定する。文字列は半角のダブルクォート「"」で囲む必要がある。選択肢を複数指定する場合は「,」でつなげる。

 「wave」は、名前の通りWAVEファイルを再生する。再生中もシナリオは進行するので、視覚エフェクトよりも先に指定するのが基本。

 「quake」は画面を揺らす命令。効果音と一緒に使うことが多いと思う。最初の「8」は揺れる幅で、大きくすると大きな揺れになる。残念ながら、揺らしながら文章を表示する、ということはできない。

 あと、バッドエンドの方を先に記述しているのは、バッドエンドの場合そこで処理が終わるためだ。途切れる方を先に記述してしまえば、次に分岐を書く時、同じように書ける。

 もし逆に書いたら、いつまでも下にバッドエンドの記述が残ってしまう。どうしてもバッドエンドを後に書きたいなら、他のバッドエンドも末尾にまとめてしまった方がいい。わかりやすくなるので。

 今回は以上。

-----今回書いたこと-----

・シーン切り替え時には、「cl a」と「stop」、「textoff」を呼ぶ

・表示文があると、テキストウィンドウは自動で表示される

・選択肢の文字列は「"」で囲む。

・「wave」は視覚エフェクトよりも先に呼ぶのが基本

・「quake」命令で画面を揺らせるが、揺らしながらの文章表示はできない

・バッドエンドは先に記述した方が後で分岐を追加する時に楽

クリック待ちカーソルの表示

| クリック待ちカーソルの表示を含むブックマーク クリック待ちカーソルの表示のブックマークコメント

はじめに

 体験談書こうとすると古いソースの汚さに鬱になるので、気分転換にNSripterパッケージのサンプルに無い部分をちょっとずつ補完してみる。

 今回は、パッケージのサンプルには「カーソルはスプライトで実装してください」とあるが、実際にはどうやるかを書く。

カーソル読み込み

 まず、ゲーム開始時にカーソル用のスプライトを読み込んでおく。表示の度に読み込むとオーバーヘッドがかかってしまうからだ。

 ただ、読み込みっぱなしにしておく必要があるので、スプライト番号はちゃんと決めておいた方がいい。

 また、後で移動させることになるので表示位置はどこでもいいが、非表示状態にしておくこと。

*loadcursor
lsph 0,":l/3,60,2;cursor0.bmp",0,0 ; 表示待ち(@)用
lsph 1,":l/3,60,2;cursor1.bmp",0,0 ; 改ページ待ち(\)用
return

 これを、*startの後にgosubで呼ぶ。画像ファイルは、「デフォルトのカーソルファイル」フォルダに入っている画像をそのまま使っている。

 ここではスプライト番号を0,1にしているが、実際には後々のためにnumaliasで別名を付けておくのが賢いやり方だ。

カーソル表示

 次に、カーソルの表示を行うルーチンを書く。

*showcursor
ispage %0
getcursorpos %1,%2
if %0=1 amsp 1,%1,%2:vsp 1,1:vsp 0,0:return ; 改ページ待ちの時
amsp 0,%1,%2:vsp 0,1:vsp 1,0 ; 表示待ちの時
return

 ちょっとわかりにくいかもしれないので、説明すると、以下のようなことをしている。

  1. 改ページ待ちなのかどうかをispageで判定し、
  2. 現在のテキスト表示位置を取得し、
  3. 改ページ待ちの場合は、取得した位置に改ページ待ち用のカーソル画像を移動して、表示状態とする。表示待ち用の方は非表示とする。
  4. 表示待ちの場合は、取得した位置に表示待ち用のカーソル画像を移動して、表示状態とする。改ページ待ち用の方は非表示とする。

 このルーチンをtextbtnwaitの前に呼び、printで表示させると状態に応じたカーソル画像が表示されるようになる。

カーソル非表示

 次に、このまま放っておくと、カーソルが表示されっぱなしになってしまうので、非表示にする必要がある。

*hidecursor
vsp 0,0
vsp 1,0
return

 これは単純にどちらの画像も非表示にしてしまっていい。textgosubからreturnで戻る時は文章表示状態になるので、どちらのカーソルも表示させる必要は無いからだ。

 このルーチンはtexecとreturnの間に呼び、やはりprintで画面を再描画させる。

 以上で完了。注意点としてはスプライト番号の衝突くらいか。ちなみに、カーソルの位置を固定したいときは、*loadcursorで座標を指定しておき、*showcursorの時にamspしなければいい。

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

2004-11-20 システムカスタマイズ体験記2

メニューバー機能

| メニューバー機能を含むブックマーク メニューバー機能のブックマークコメント

はじめに

 前回、結局講座の初回のような話をしてしまったが、今回からきちんと体験談を書いていく。

 まず、基本的な部分はサンプルを写し、ほぼそのまま使った。詳しくは『システムカスタマイズ・AVG形式サンプル』というフォルダにあるサンプルを見て欲しい。ちなみに、面倒かもしれないが、一度はサンプルを試しておいた方がいい。

 では機能について先に説明すると、メニューバーというのはウィンドウ情報にある、「画面」や「フォント」などが付いてるバーのことだ。ただし、それを加工したのではなく、独自にスプライトを用いた画像メニューバーを実装した。したがって、デフォルトのメニューバーはdeletemenuで消え去ってもらっている。

 このメニューバー機能で想定していたのは、「普段は見えないこと」、「選択肢が表示されたら見えること」だった。普段から見えるのはキャラの表示にかぶってしまい、好ましくない。また、気づかれにくさを緩和するため、セーブしようとすることの多い、選択肢表示時には姿を現すようにする、ということだ。

普段見えないようにする

 普段見えないようにするには、exbtnを使う以外に無い。exbtn_dで非表示にしておき、exbtnでバーごと表示する、という処理だ。実際には、以下のようにした。

  1. ボタン画像(セル0:通常時、1:カーソル時)と対応する各ガイド画像を必要分用意する
  2. exbtn_dで上記をすべて非表示状態にする
  3. exbtnで、ボタン化するスプライトのセル1と、対応するガイド画像を表示とし、他のスプライトはセル0を表示して対応するガイド画像を非表示とする。

選択肢が表示されたら見えるようにする

 選択肢が表示された時、見えるようにするためには、普段とは違いexbtn_dにボタン画像をセル0にした制御文字列を設定する必要がある。exbtnする時は上記と同様。もちろん、cselを使って、*customsel後に、選択肢と共にボタン化するというふうにしている。

処理を省みて

 この処理で厄介だったのは、処理そのものを考えるのもそうだが、スプライト番号の管理だ。これについては結局範囲を確定させるくらいしかできず、余りうまい方法とは言えなかった。今後の改善を検討している。

 また、負荷の軽減には、せいぜい、シナリオ開始時に必要な全画像を読み込んでおくという、当たり前のことしかしていない。他にできそうな部分を探したいが、あまり大きく改善はできなさそうだ。

 大して面白い話が無かったが、こんなところ。

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

2004-11-19 NScripterまた更新されてる・・・

NScripter v2.48

| NScripter v2.48を含むブックマーク NScripter v2.48のブックマークコメント

 NScripter v2.48がリリースされた。definereset+deletemenu を使ってる人や、getfunctionを使ってる人は更新した方がよいかと。それ系のバグが修正されてるらしいので。

体験版に必要なもの

| 体験版に必要なものを含むブックマーク 体験版に必要なもののブックマークコメント

 『グラス学園物語 片眼鏡版』というソフトの体験版に必要なものを考え中。現状、以下があればいいかと思っている。

・タイトル画面に「体験版」というロゴ

・シナリオ開始時に「これは体験版です」という注意書き

・シナリオがぶった切れるところに「以降は製品版をご購入ください」という宣伝

 こんなものだろうか。数々の体験版を触ってみても、目に付いたものはあまり無い。

 せいぜいシナリオが長かったりするくらいだが、体験版ゆえの工夫とは言いがたいし。某Fateのように、外伝的なものを持ってくるのが妥当なんだろうか。

 まあ、可能性を感じさせることさえできればいいんだが・・・

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

2004-11-18 初心者講座第3回

シナリオ1

| シナリオ1を含むブックマーク シナリオ1のブックマークコメント

はじめに

 タイトル画面はあれでとりあえず放置。ボタンを使うとなると、色々と説明する必要があるので、後回しにする。実際そうした方がいいのは、前回説明済み。では、次にシナリオの作成に入る。

用意する素材

 シナリオ全体で用意するのは、シーンごとの背景と立ち絵、BGMになると思うが、とりあえずここでは最初のシーン分だけあれば良い。背景は640*480、立ち絵は480*480、BGMはMIDI、MP3、WAVEのうちどれでもかまわない。

 このうち、立ち絵のサイズは実際には何でもいい。NScripterがうまく合わせてくれる。気をつけて欲しいのは、横に関しては描くキャラクタの中心を画像の中心に合わせることと、縦に関しては、各キャラクタを下を基準にして並べることだ。

 立ち絵表示の命令を使った場合、横幅はサイズに関係なく中心に合わせてくれるが、縦幅は画面の下端を基準にして画像の下端を合わせる形になるから、というのがその理由だ。ま、どのキャラクタも同じサイズで作るのが後々色々やろうとした時に便利なので、面倒でなければそうすることをお勧めする。

スクリプトコーディング

 では、コーディングに入る。こちらでは、背景画像として「scene1.bmp」、立ち絵として「chara1.bmp」、BGMとして「bgm1.mid」を用意した。早速前回のスクリプトにこれらを組み込んでみる。

*define
game
*start
; タイトル画面の表示
bg "title.bmp".1
click
; シナリオ実行
goto *scenario

; ゲーム終了
*end
end

; シナリオ開始
*scenario
bg black,10,1000
; 最初のシーン
*scene1
; 背景と立ち絵を読み込んでおく
bg "scene1.bmp",0
ld c,"chara1.bmp",0
; 表示
print 10,1000
bgm "bgm1.mid"
最初のシーンの文章@
1ページ目
\
2ページ目
\
goto *end

 結構長くなったが、これで、タイトル画面でクリック後、フェードアウトして最初のシーンの背景とキャラクタが表示され、BGMが流れて最初のシーンの文章が始まる。そしてクリックすると「1ページ目」が表示され、次のクリックで「2ページ目」が表示され、もう一度クリックすると終了する。

 「1ページ目」、「2ページ目」の先頭の文字が半角になっていると、文字化けの原因になる。表示する文字には全角文字だけを使うよう注意して欲しい。

 また、ファイル名を指定している部分は、それぞれ半角のダブルクォート「"」で囲んでいる。全角だとうまくいかない。

記述の説明

 まず「*」のラベルについては前回説明済み。

 で、「goto」だが、これは指定したラベルに処理を移動する命令だ。上記を見ての通り、シナリオ開始時と終了時で呼んでいる。存在しないラベルに移動しようとした場合はエラーになるので、その時はラベルの記述をチェックすること。(ちなみに、endにラベルを付けているのは好みみたいなものなので、endそのものでもいい。)

 上記で、シナリオ開始と最初のシーンを分けているのはシナリオ開始時の「初期化」という作業を行うためだが、この辺りはまだ説明しない。現在は単にフェードアウトしてるだけ。

 ちなみに「bg black」は、画像なしで使える命令で、背景を真っ黒にしてくれる。結構使えるので「bg white」とセットで覚えておくといい。続いて記述されている数字はエフェクト指定だ。これは後で説明する。

 次に「ld」命令だが、立ち絵を描画する。(おそらく「load」の略称)

 半角空白を挟んで後ろに続く「c」という文字は、「center」で、立ち絵を中央に描画する。他に「l」と「r」があり、それぞれ左と右に立ち絵を描画する。元の単語はまあ想像が付くだろう。

 「print」はコメントの通り表示命令で、数字はエフェクトを指定している。

 「bgm」はそのままBGMの演奏命令だ。

 「@」は表示待ちで、ユーザがクリックするまで次の文章の表示を待つ命令。

 「\」は改ページ待ちという命令で、クリックを待つのは「@」と同様だが、クリックすると表示されている文章が消去され、次の文章は1行目から表示される。

エフェクト指定

 NScripterでは、描画系の命令のほとんどに、エフェクト指定が使える。それらは番号で指定し、0,1以外の番号では、基本的にエフェクトにかける時間を指定する必要がある。詳細はマニュアルの「effect」の説明を見て欲しい。

 ちなみに「10,1000」は「1秒間のクロスフェード」という指定で、何にでも使えるので、覚えておくといい。また、独自のエフェクト番号を登録することもできるが、それは今度説明する。

描画と表示

 ところで、「*scene1」から「print」のところで引っ掛かる人が意外と居る。これは、「描画」と「表示」を分けてないからだ。この辺りがわからないと後々理解が更に難しくなるので、先に説明しておく。

 まず、普通、書いたものは目に見えるが、パソコンの場合、単にデータとして保持することができる。そして、bg命令とld命令でエフェクトを0に指定すると、「読み込んで描画する」ことが行われる。つまり、この時点で既にデータとしては保持している。次に、print命令により、「画面に表示する」という動作が行われ、目に見えるようになる、という仕組みだ。

 すぐにわかる部分ではないので、実際に命令を書いて試してみたりするといいと思う。ちなみに、「描画」と「表示」という言葉に関しては、説明に使っただけなので、特にそういう意味を持っているというわけではない。

 今回は以上。

-----今回書いたこと-----

・立ち絵は、横は中心を合わせ、縦は下端を基準に合わせる

・ファイル名は半角のダブルクォート「"」で囲む

・「goto」でラベルに移動させることができる

・「bg black」、「bg white」は画像無しで使えて便利

・エフェクト番号0は読み込みのみを行う

・読み込んだ画像は、表示命令を使わない限り表示されない

2004-11-17 初心者講座第2回他

タイトル画面1

| タイトル画面1を含むブックマーク タイトル画面1のブックマークコメント

はじめに

 ノベルゲームだけでなく、すべてのゲームにおいて、タイトル画面はつきものだ。数瞬タイトルを表示するのみという、おそろしく簡素なものもあったが、タイトル画面と呼べるものが無いゲームは無かったと思う。

 ゲームをどこから作ったらよいのか?という問に対する答えは、回答者の数だけあると思うが、自分としては、タイトル画面をまず作るべきだと答える。なので、ここでもまずタイトル画面の作成から始める。(理由については、後で述べる)

タイトル画像の表示

 では、作成を開始する。

 まずは、タイトル画面となる画像を用意して欲しい。640*480(幅640、高さ480という意味。単位はピクセル。以降も同様)で、タイトルロゴっぽいものが表示されていればいい。(面倒なら真っ白画面でもいい。後で変更すれば問題は無い)

 画像のファイル形式については、ビットマップでもJPEGでもかまわないが、PNGはプラグインが必要となるので、駄目。よくわからない人は、MSペイントを使って欲しい。(スタート→すべてのプログラム→アクセサリ→ペイントを選択して起動。変形→キャンバスの色とサイズを選択し、上記のサイズに合わせて保存する)

 こちらでは「title.bmp」というファイルを用意した。このファイルを、前回作成した「kouza」フォルダ内におく。そして、「00.txt」を開き、以下のように記述を加える。

*define
game
*start
; タイトル画面を表示
bg "title.bmp",1
click
end

 これで、タイトル画面が表示され、クリックすると終了するようになる。

記述の解説

 それぞれの記述についてだが、まず、「*define」と「*start」は「ラベル」というもので、位置を示す記述だ。先頭の「*」がそのことを示している。当然、スクリプト中で唯一つである必要がある。

 また、上記二つについては必須で、必ずどこかに書いておかなければならない。

 NScripterは、定義ブロックと実行ブロックに分かれており、使用可能な命令がそれぞれのブロックで異なる。「*define」は定義ブロックの開始位置を指し、「*start」は実行ブロックの開始位置を指すため、必須となる。

 「;」は、その後の文字列をコメントとして認識させる文字。1行単位なので、次の行に影響を与えることは無い。コメントは、後で見てわからないと思ったら、すかさず入れることをお勧めする。コメントによって処理が重くなることは無いので、安心して入れていい。

 その他は命令。ラベルに限らず、命令は半角英数字である必要があることに注意。

 全角文字で書いても、表示するか、エラーになるだけで何も起こらない。

 「game」は定義ブロックの終了を表すと同時に、「*start」ラベルに飛ばす。

 「bg」は背景を描画する命令。背景は必ず一番奥側に描画されるということを覚えておいた方がいい。

 「click」は左クリックを待つ命令。ちょっと表示を見たい時に、一時的に差し込むことが多いので、覚えておくと便利。

 「end」は終了する命令。これが無いと、エラー終了となる。

 これらの命令は「nscr」フォルダに同梱されたマニュアルに書いてあるが、まだマニュアルを見る必要は無い。テキストならともかく、あれはただのリファレンスで、普通の人が普通に読むように作られてはいないので、命令の確認のために見るくらいでいい。

タイトル画面を最初に作る理由

 タイトル画面を最初に作るのは、単純に、「必要で、着手しやすいから」だ。まず最初にタイトル画面を作る、と思っていれば、「何から作ろう・・・」という迷いは無くて済む。本来はある程度設計を行っておく必要はあるが、一人で作る場合、メモ程度でいいし、実装しながらの方が早いことが多い。

 ただ、タイトル画面に凝り過ぎると、本文に入る前に燃え尽きるので、ちょっと作成したら、とりあえず放置しておいていい。余裕があったら本格的に動作するよう調整するくらいで、十分だろう。

 今回は以上。

-----今回書いたこと-----

・ゲームはタイトル画面から作ると着手しやすい

NScripterでは、PNGはプラグイン無しで表示できない

・「*」から始まるのは「ラベル」といい、スクリプト中に唯一つのみ

・「;」以降の文字列は「コメント」となり、処理に影響しない

・命令は半角英数字で記述する

システムカスタマイズ体験記

| システムカスタマイズ体験記を含むブックマーク システムカスタマイズ体験記のブックマークコメント

はじめに

 システムカスタマイズは中・上級者向けなので、初心者は読まないように。まだ混乱するだけと思う。講座形式にしようかとも思ったが、それほど手馴れたとは言えないので、実際に組んだ体験について書く。

 まず、システムカスタマイズによって、実際に組み込んだのは、大体以下の機能だ。

  1. メニューバー機能
  2. キーボード操作・マウスホイール対応
  3. ダイアログ
  4. セーブロード画面
  5. コンフィグ画面
  6. キー一覧画面
  7. メニュー画面

 これらを次回以降一つ一つ説明していくことにして、今回はシステムカスタマイズの概要について書こうと思う。ちなみに組み込んだソフトは、『グラス学園物語 片眼鏡版』。現在以下サイトにて500円で販売中。一応そのうち無料の体験版を作る予定だが、もし興味が湧いたなら購入して欲しい。・・・軍資金になるので。

島西工業 Topページ

システムカスタマイズの捉え方

 妙な見出しに見えるかもしれないが、「システムカスタマイズのやり方がわからない」という人は、そもそもシステムカスタマイズが何であるかについての理解が薄いように思えるので、詳細より先にちょっと書いておくことにした。

 システムカスタマイズとは、NScripterで基本的に提供している一部のシステムを使えなくする代わりに、独自の実装を可能にするものだ。作る必要があるものは以下の通り。

・表示待ち、改ページ待ち状態

・右クリックメニュー(正確には右クリックによる動作)

・セーブロード

 上に挙げた通り、作成が「必要なもの」は、そう多くは無い。どちらかというと、作成が「可能になるもの」のためにシステムカスタマイズを考える必要が出てくる。だから、本当に必要なのかどうかを、最初に検討した方がいい。でないと元のシステムを下回るものを作ってしまいかねない。

 で、作成が「可能になるもの」についてだが、実は特に無い。それというのも、システムカスタマイズは、独自実装を簡単にする仕組みであり、「\」と「@」によるユーザ入力待ちをシステムではなく、実装側で受け持つ仕組みのことを指しているからだ。

 だから、実は「\」と「@」を別の命令にするだけで、似通った動作をさせることは可能だ。実際、『十小説』では、「\」と「@」を一切使用しない仕様だったが、やってることは非常にシステムカスタマイズに近い感じがした。

 以上は、あくまで個人的な見解だが、システムカスタマイズを行うためには、システムカスタマイズによる処理がNScripterのシステムの流れの中にあることを、先んじて頭に入れておく必要はあると思う。

かなでかなで 2009/05/21 21:07 サーフィンして来ました。かなでと申します。
タイトル画像を作ったのですが、PNG形式でないと表示されません。
真っ黒な画面のままです。何がいけないんでしょう?

かなでかなで 2009/05/21 21:11 すみません!!解決してしまいました!
お目汚しでしたら削除してください;

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

2004-11-16 講座開始

はじめに

| はじめにを含むブックマーク はじめにのブックマークコメント

はじめに

 最初に書いておくが、これは初心者向けのノベルゲーム作成講座だ。

何かよくわからなくてNScripterを使うとこまでいかなかった人とか、パソコンでインターネットとメール以外にやることを探してる人とかが対象。

 実際に本家の掲示板でとんでもない質問を投稿する前に理解しておいて欲しいことを、ゲームを作成しながら教えていく。いわば入門ってところ。本講座終了時には一本ゲームができているように、進めていこうと思う。

 で、まずはノベルゲームについてだが、ようは小説風のゲームで、単なる小説との違いは、背景があって、選択肢があるといったところか。複雑な処理を必要としないので、プログラマではない人がはじめてゲームを作るにはまさにうってつけ。

 次にNScripter自体についてだが、キーワードの情報を見てもわかるように、高橋直樹氏作成のスクリプトエンジンだ。簡単に言うとノベルゲーム作成支援ツールで、単なる文章表示だけでなく、背景表示や選択肢の表示が非常に容易になるし、個人で使用する限りお金を取られることは無いので、安心して使える。

NScripterの取得

 では、早速ダウンロードしてみよう。高橋氏のサイトを表示し、「NScripter VerX.XX」と記述されているリンクをクリックし、適当なフォルダを指定すると取得できる。(X.XXというのはバージョンで、その時点で一番新しいものが置いてある。現在は2.47が最新)

 で、ダウンロードすると、「nscr.lzh」というファイルが手に入る。このファイルは「LZH」という形式で圧縮されているため、元に戻す操作をするのだが、そのためにはいわゆる「圧縮・解凍ツール」というのが必要となる。

 「lhaplus」や「lhaca+」なんかの有名どころでいいので、いずれかをダウンロードしてきてインストールする。インストールするときに設定をいじらなければ、関連付けされるはずなので、あとは「nscr.lzh」をダブルクリックするだけでいい。

 フォルダの解凍に成功したら、中身を確認しておく。とりあえずは、「nscr.exe」があれば特に問題は無い。

NScripterの起動

 まず、「kouza」というフォルダを作成して欲しい。マイドキュメントの下でも、どこでもかまわない。(右クリックして新規作成→フォルダを選択し、名前を変更すればできる。)以降、ファイルを作る場合は、このフォルダ内で行うこととする。

 作成したら、先に取得した「nscr.exe」をフォルダ内にコピーする。そして、スクリプト用のファイル「00.txt」を作成する。(新規作成→テキスト ドキュメントを選択し、名前を変更)

 「00.txt」を開き、以下のように記述して、保存する。

*define
game
*start
click
end

 これで、作業は完了。「nscr.exe」をダブルクリックして、起動を確認する。真っ黒なウィンドウが開き、クリックすると終了したらOK。

もし「*defineがありません」のようなエラーが出たら、「nscr.exe」と「00.txt」が同じフォルダ内にあるかどうかや、「00.txt」の名前が間違ってないか確認する。環境によっては、拡張子を表示していないこともあるので、「00.txt」を単に「00」にして起動してみるといい。

 できるだけ簡素に書いたが、わかりにくければ、コメントでも入れてくれればいい。

 記述の内容については次回説明する。今回は以上。

-----今回書いたこと-----

・ノベルゲームとは、小説+選択肢のゲーム

NScripterは、ノベルゲームの作成を支援してくれるツール

・LZH形式のファイルは解凍して元に戻す必要がある。

・最低限必要なのは「nsce.exe」と「00.txt」

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

2004-11-15 久々の・・・

復活

| 復活を含むブックマーク 復活のブックマークコメント

書き込むの9ヶ月ぶりだな・・・

あまりメモには向いてないということがわかったのだが、サイトの宣伝も兼ねて、復活させることにする。

過去の日記はあまりに内容が無かったので、きれいさっぱり削除した。

書く予定としては以下の通り。

  1. 超初心者向けNScripter講座
  2. 開発日記
  3. システムカスタマイズについて
  4. その他雑記

ま、どうせ誰も見てないことだし、適当に。

十小説開発完了

| 十小説開発完了を含むブックマーク 十小説開発完了のブックマークコメント

今回は、『十小説』のシステムを開発した。(以下からフリー版をダウンロード可能。)

眼鏡学園 ©島西工業 ダウンロード

このソフトでは縦書きのザッピングという結構面倒な機能を実装している。

他にも、アニメーションアイコンをシステム用のボタンとして使ったり、ページ既読フラグを独自に持たせたりなど、割と凝ったと思う。

特に縦書きのザッピングで、縦書きのスプライト表示処理部を作るところが非常に厄介だった。

NScripterは縦書き指定してもスプライトは横書きのままなんだもんなぁ。

ま、スプライトの縦書き対応をされてしまうと、せっかく苦労して作った処理が無価値になるので、このままでもいいけど。

ちなみにシステムカスタマイズについては、表示待ちも改ページ待ちも発生しない形態なので、何もしてない。というか、何もできなかった。

さて、片眼鏡版の体験版でも作るか・・・

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