NScripter覚え書き

使っていて気づいたことをダラダラと書き殴るページ。
NScripterに拘らないノベルゲームの独白は コチラ に書いてます。




更新日:2019年08月03日
■インターネット・アーカイブの活用

 NScripter2正式版が公開され、役目を終えて閉鎖したのかなと感じるNScripter関連サイトを多く目にするようになっています。
 これらの閉鎖サイトを参考にしたいと切望する方はインターネット・アーカイブを活用しては如何でしょうか。
 インターネット・アーカイブに関する事柄はWikipediaなどで知ることができます。

NScripterとNScripter2の間に互換性はありません。
プラグインの配布状態に関しては ガラスグサ現存するNScripterプラグインについて が役立つと思います。


■はじめてNScripterを利用する際に入手すべきファイル

 これから始める人が NScripter公式サイト から入手すべきファイルは以下の2つ。(2015/09/17調べ)
 どちらか1つでは物が足りないので必ず全て手に入れること。

NScripter最終版
初代NScripter最新ファイル。XP以降に対応(公式のWindows10対応は不明。私的に確認した限り、問題なく起動)。
Windows98/me/2000についてはver.2.96から対象外となった。
nsogg2.dll などの基本ファイルを同梱。Lua言語採用前のファイル類は除外されている。
NScripterドキュメント
NSLua のマニュアルと混同を避けようと外された基本のマニュアルや nsaarc.exe などのツールはこれにしか入っていない。


■非公式マニュアル

 公式マニュアルは走り書きされた感じで使い勝手がよくない。
 オフィシャル本の巻末リファレンスも間違った説明をしていることがあるので頼りすぎないほうが良い。
 そこで有志の作られた大変ありがたい非公式マニュアルをオススメする。
 うpろーだ のと NScripter Scripting Factory のリファレンスが広く知られて良く使われていると思う。

 ※使いやすさの視点から非公式マニュアルを薦めてるけど、公式マニュアルにしか載ってない命令の補足説明があります。


■オフィシャル本は ver.2.82 基準の解説本

 公式掲示板に オフィシャル本 のサンプルを使うとセーブでバグると報告されることもあったけど、セーブの仕様変更が原因であって
 バグではない。

 それ以外にバージョンアップの更新で起きたこれまでの大きな変化
 透過PNGの正式対応 ※nspng.dll 使用
 画像エフェクトのキャンセル ※effectskip で ON/OFF 切り換え可能
 BGMの非同期化 ※nsogg2.dll 使用
 getparam でカラーコードの取得 ※文字変数扱い
 ボタン命令の刷新 ※bexecなど
 バグで非推奨だった mousecursor の修正  
 BMPファイルの無圧縮アーカイブ化(ver.3.03にて問題改善) ※NS2Arc.exe 使用
 Lua言語の採用 ※nslua.dll 使用
 画面サイズの細かい指定が可能でワイドサイズのゲームが作れる  
 変数とラベルの最大数が増やせる  
 アップデートパッチの作成 ※nscmake2.exe 使用
 セキュリティに関わる脆弱性 ※ver.3.00より前のバージョン

 ※「あどばんすどNScripter」は絶版。取っ掛かりの教材としてそこそこ使い勝手が良い。


■ファイル名は 00.txt と 0.txt のどちらが正しいのか

 講座サイトによってはスクリプトを書くファイル名が 0.txt だったりするけれど、これはかなり古い記法。
 それまでの仕様と互換性を保つために残ってはいるが、XP以前はファイル名を 0.txt 〜 99.txt として名前順で並び替えをした場合
 このようになってしまう。

OSの仕様が原因で起きていたファイルの並び順

 現在ではWindowsの仕様変更により 0.txt 〜 99.txt と書いても作業し辛いということは無くなったが、
 これを回避する為に 00.txt とした経緯がある。


■value の記述位置は必ず 00.txt の1行目にする

 画面サイズを640で作っている作品に見られる傾向。
 変数の範囲を変える場合に value 命令を利用するわけだが、00.txt の1行目ではなく2行目以降に書かれるケースがある。
 例え1行目が無記名であっても、これではグローバル変数の範囲は変更されていない。
 デフォルトのまま200以降がグローバル変数として扱われることになるので、value の記述位置は必ず 00.txt の1行目にすること。


■定義節で見落されがちな必須命令

 effectcut スキップ時の描画処理エラー落ち防止。
 mode_wave_demo スキップ中に再生されるループ音の無効化防止。
 addkinsoku "”】","【“" 禁則処理しない約物の文字分かれ防止。


■定義節を弄ったら envdata を削除

 defbgmvol など命令の一部に初回起動のみ反映される命令がある。
 システム作って1度でも起動したことがある場合はシステム改良時に envdata を消さないと誤作動する事もある。

 ※ envdata 消すとそれに関連した保存ファイル(gloval.sav など)も当然影響を受けるので注意。


■フォルダは自動作成されない

 savedir を使って保存先を指定した場合は手動でセーブフォルダを作る必要がある。
 フォルダが存在しないとセーブできないしグローバル変数なども保持されない。


■名前が似てて使い方を間違えそうな命令

 effectcut スキップ時はエフェクト表示をすべて瞬間表示にする命令。
 effectskip エフェクト表示している画像をボタン操作で瞬間表示させる命令。
 
 autoclick ボタン操作をしても中断されない。デモとかに使う命令。
 automode ボタン操作すると中断する。ゲームプレイ中に使うのはこっち。systemcall 命令の機能の1つ。


■saveon の仕様が ver.2.93 から変わった

 仕様変更によってデフォルトシステムのまま使うと文中に br のある画面でのセーブはロード時に一部テキストが消失するバグがある。
 これが原因でシステムカスタマイズして使うことが前提になってしまっている。

デフォルトシステムでセーブした直後の状態デフォルトシステムでロードした直後の状態

 解決法はクリック待ち時の saveon 記述位置を texec の真下に移すか新命令 autosaveoff を組み込む。
 選択肢など他の場所にも saveon を組み込んでるなら記述位置を確認し、場合によっては弄る必要性がある。

texec の真下に saveon を移すとロード時の挙動が今までと違ってくる。
従来通りの挙動を望むなら autosaveoff を使うしかない。
ただし、br と textclear をカスタマイズする必要がある為、若干ハードルが高い。


■スペースキー・エンターキー・マウスボタンで wait 系命令の動作が全く違う

 マウスボタン 指定した通りの時間を待つ。時間待ち命令の全てが想定している動作をする。
 エンターキー 時間待ち命令の指定があっても「無効化」される。
  resettimer と waittimer で構成された時間待ちのみ無効化されない。
 スペースキー 指定した通りの時間を待つ。ただし、delay(!d) が中断できない。


■マウスカーソルをデフォルトに戻すプラグイン

 mousecursor 命令を使って変更したカーソルは うpろーだ の n_0235.zip を使えば戻せる。
 他にも 永字八法 で色々と述べられているので参考にすると良いかもしれない。


■マウスカーソルの自動非表示

 君影草工房[HP消滅?] の mouseext.zip や NS栗[HP消滅] のシステムカスタマイズサンプルに付属するプラグイン MenuE.dll
 を使えば可能。
 挙動に違いがあるので試して好みの方を使えば良いと思うけど、
 カーソルが消えている時にエラー吐かれると微妙にウザいのでシステムバグをあらかた潰した後に実装した方が良い。


■メニューバーが2段表示だとウィンドウモード時に画面下が切れる

 NScripterのバグとWindows側のデザイン設定が原因。
 画面設定640×480以下で起きる傾向にあると思われる。
 項目を insertmenu 命令などで調整するかフォントサイズを小さくしてメニューバーの表示を1段にすれば直る。

 対応OSは確認してないけど、この問題を解消するプラグイン(複数段メニューに対応させるDLL)が うpろーだ にある。

 フォントサイズ変更は、主にユーザーサポートで促す対処方法である。
 XP以前は「画面プロパティ」→「デザイン」→「詳細設定」→「指定する部分」→「メニュー」から変更可能。
 Vista以降は「個人設定」→「ウィンドウの色とデザイン」から同様の画面設定に入れる。

 テーマを使って画面変更している場合はフォントサイズを弄れない可能性がある。
 デザイン変更はOS別で設定画面に入るまで微妙に違う。
 キャプチャ画像を使って解説しているサイトがある。ググって参考にする方が分かり易い。


■killmenu でメニューバーからフォントの項目を消すとバグる

 一度ウィンドウからフォーカスを外して非アクティブ状態にすれば一目瞭然。

フォント項目を削除すると起きる症状

 resetmenu 命令と insertmenu 命令を使いメニューバーを構築する方法でフォント項目の削除は可能なので、
 killmenu 命令で起きるこのバグは今後も解消される見込みは低いと思われる。


■メニューバーのページ単位の文字表示は使用禁止

 システムカスタマイズするとテキストの改行位置が狂ったり、同じテキストを繰り返し表示するなどバグって使い物にならない。

 自作した右クリックメニュー(オプション画面)で menu_click_page 命令を使うのも微妙。
 機能実装したいなら menu_click_page 命令ではなく ispage 命令の判定を利用すれば良いかも。


■メニューバーに機能は加えられない

 insertmenu 命令を使ったメニューは「セーブ」「ロード」など項目に無い機能を付け加えることは出来ない。

 「フォント」など状態を取得する命令がない項目は右クリックメニュー(オプション画面)と連動させるのも難しい。
 オートモードについては isskip で状態を取得して停止。自作したものと切り替えるといった連動が考えられる。

 メニューバーの出し入れに使える btnarea という命令があるので、不足に感じるならば自作してしまうのも一つの手。


■マニュアル未掲載 メニューバー命令 AUTOSPEED

 オフィシャル本「あどばんすどNScripter」にのみ載っている。

 AUTOSPEED は insertmenu 命令に追加された機能。
 メニューバーにオートモード速度設定BOXが追加される。
 これ単体では機能せず automode_time2 で数値を設定する必要がある。

 記述例
insertmenu "オートモード速度",AUTOSPEED
automode_time2 0,2500,5000             ;設定数値の内訳は左から「最小値」「デフォルト値」「最大値」

 オートモードはその挙動が気に入らずカスタマイズしてる人もいる。
 「Nscripter オートモード」辺りでググればヒットする。


■バックログのスクロールバーや右クリックメニュー(オプション画面)の文字速度や音量調節のスライダー

 うpろーだ のサンプル n_0040.zip や n_0050.zip と n_0051.zip 辺りが参考になる。


■不定形テキストウィンドウの背景色(RGB)や透過度を右クリックメニュー(オプション画面)で変える

 うpろーだ のサンプル n_0055.lzh が参考になる。


■右クリックメニュー(オプション画面)でフォント変更させる

 君影草工房[HP消滅?] のフォント機能拡張 fontext.dll と NScripter Scripting Factory のサンプル「フォント操作ラッパ」を
 参考にしたり、
 NS栗[HP消滅] のシステムカスタマイズサンプルと付属プラグイン MenuE.dll を使えば可能。


■ゲームに同梱したフォントを使うプラグイン

 君影草工房[HP消滅?] のフォント機能拡張 fontext.dll を使うことでOSに直接インストールせずに同梱フォントの実装が出来る。


■フルスクリーン時に明朝系の文字が掠れる

 NS栗[HP消滅] のフォントプラグイン NSFont.dll を使えば改善できる。
 ただし、以下の2点に注意すること。

 注意点1
  フォントを太字で使っている場合はプラグイン側で exec_dll "NSFont.dll/weight,1" と設定して、
  setwindow などNScripter側のフォント関連の太字設定は全て切る。
  切らないと明朝が綺麗になってもゴシック系の文字が今度は潰れて汚い。

setwindow と NSFont.dll ともに太字の状態NSFont.dll のみ太字の状態

 注意点2
  文字スプライトの省略記述が出来なくなる。
  文字サイズもしっかり書かないと文字が潰れるわ色指定が無効といったバグがでる。

lsp 1,":s#ff0000魑魅魍魎",30,18 : print 1                      ;文字の色を赤にサイズは省略 ※NG

lsp 1,":s/25,25,0;#ff0000魑魅魍魎",30,18 : print 1             ;文字の色を赤にサイズも記述

文字サイズを省略すると起きる症状文字サイズを記述した状態


■NScripterで袋文字

 それなりに切望されているけど、実装はかなり難しいっぽい。

 そんな中にあってプラグインがいくつか作られている。
 「NScripter ドロップシャドウ」辺りでググれば見つかるかもしれない。
 2ch過去スレ「NScripter Ver.16.00」に NSFukuro.dll の入手ヒントがある。


■外字の登録

 NS栗[HP消滅] のフォントプラグイン NSFont.dll で可能。
 ハートマークの画像があらかじめ用意されてるし、バックログにも対応していて便利。

旧アーカイブの nsa と違い、ns2 は定義節で外字登録するとアーカイブ時にエラーが起きるので実行節に記述すること。
画像をPNG形式にすることで回避してた問題についてはver.3.03で修正されたが、
もしダメだったら NScripter−Tips の「中級者向けTIPS」を参照。


■表示するテキストの一部を大きくしたり小さくしたりすることは簡単に出来ない

 感情の起伏に合わせてフォントサイズを変える演出はNScripterの仕様的に難しい。
 QWERTION の物置にサンプルがあるが、これ見て無理と思ったらスキル不足と思われ。
 鋭意修練ってことで組めるようになるまで素直に諦める。


■文字スプライトで英文

 半角文字で英文を書くとNScripterの仕様が原因で偶数部分の文字アキが削られる。
 これを半角アンダーバーで対処しても見た目よろしくない。
 文字サイズは縦横でそれぞれ変えられるから全角文字で横の文字サイズを縦の1/2〜2/3サイズに字間を-2〜-4程度にする。
 そうすれば半角文字っぽく見えるのでアンダーバー使うより良いと思われ。

 ※NScripter−Tips の雑記2010/12/27にてLuaを使った半角文字の英文サンプルが提示されたのでそちらも参考にしよう。


■文字列の連結方法

 変数を使った連結は""の外に出すのが正しい書き方。
 ""の中に書いて偶然表示されても仕様を把握してないと単なるバグの温床でしかないので注意。

 記述例
mov $0,"戦国群雄伝"
lsp 1,":s/25,25,0;#ffffff"+$0,30,18              ;格納された文字列 $0 は + を用いて連結させる
print 1


■より精度の高い既読の実装

 標準の既読判定に不満があるなら NSLua を使った うpろーだ のサンプル n_0228.zip が参考になる。


■linepage は手軽に扱えるような命令じゃない

 オフィシャル本「あどばんすどNScripter」には如何にも手軽に扱える便利な命令のように書かれているが実際はその逆。
 大雑把なスクリプト記述は出来ないので使おうと考えている人にとって、むしろ足枷になるのでは?
 そんな命令をオフィシャル本で勧めている理由はテキスト関係の仕様を覚えさせる為だと思う。


■texec の果たす重大な役目

 システムカスタマイズのサンプルを使っているだけでは気付き難い texec 命令の重要性。

 記述例
帝国のマーチ(ショートバージョン)@
br
帝国は とても強い@
戦艦は とてもデカイ
ダース・ベイダーは 黒い@
トルーパーは 白い@
デス・スター 丸い\

正常な文字表示の状態(texec あり)異常な文字表示の状態(texec なし)

 改ページ後の文字クリア以外に文字送り後の判定もしていて、軽んじると文字表示が崩れる。


■クリック待ち命令 clikstr が抱えているバグ

 システムカスタマイズすると起こるバグ。
 クリック待ち後、改行しない文中に文字変数が含まれていると文字化けする。
 キャラクターの名前を変えられるシステムを組む場合は要注意。

 記述例
mov $0,"○×△"
おはようございます。良い天気ですね$0くん。\

文字化け対応前文字化け対応後

 回避方法
おはようございます。@良い天気ですね$0くん。\

 こんな感じにクリック待ち部分に @ を追加すれば文字化けしない。


■クリック待ち命令 @ \ が抱えているバグ

 システムカスタマイズすると起こる禁則処理がされないバグ。
 設定した横文字数より1字少ない部分で文字待ち、行末の文字に禁則文字が掛かると禁則処理されない。
 例えば、横文字数23として22文字目で文字待ちした場合。

 記述例
うわぁああああああああああああああああああ。@あ!\

表示した直後の状態バックログの状態


■ルビを使う時はルビ文字のサイズ分、行間を開ける

 エラー落ち対策。
 例えば、文字サイズを20と設定した場合、ルビ文字のサイズは rubyon 等で設定しない限り半分の10になる。
 この時は行間を10以上間隔を開ける。
 行間を開けず10以下の間隔のまま1行目でルビ文字を使うとバックログ参照時にエラー落ちする。

 公式の付属マニュアルで仕様をシッカリ確認するのは当然として、
 永字八法 に書かれていることも大変参考になるので一度目を通すことをお勧めする。


■バックログで見返すと所々 br が消えてる

 上部文字を設定した横文字数一杯に表示すると消える。
 例えば、横文字数23で設定した場合、23文字並べた直後に br を使った個所はバックログで消えてしまう。

 記述例
あいうえおかきくけこさしすせそたちつてとなにぬ
br
はひふへほ。

表示した直後の状態バックログの状態

 br を全角スペースに置き換えることで取り合えず対処可能。
 試してないけど defsub 命令使って全部置き換えてしまうのが autosaveoff の対処も簡単になっていいかもしれない。


■gettaglog は文字化けすることがある

 閉じブラケット ] と同じコードをもつ文字を使った場合は文字化けする可能性があるので注意。
 オフィシャル本「あどばんすどNScripter」のバックログサンプルが gettaglog を使わずに名前取得してる理由のひとつじゃないかな。

 ダメ文字の一例
‐ゾЬ云馨犠珪江讃従疹曽綻転脳評望余肋兢咯嫋彎拆枉歉濔畩秕緇臂蘊訃躱鐓饐鷯yy


■縦文字表示はバックログがバグる

 色々と問題抱えてるので使うなら覚悟が必要。


■クリック待ちせずに改ページ

 ページを跨いでテキストを表示させる演出をしたい場合は textclear を使う。


■テキストを瞬間表示する時は !s0 ではなく textspeed 0 を使う

 3行程度のクリック待ちのない長文を試しに表示させれば一発で判別できると思う。残像感が出て !s0 では瞬間表示にならない。
 テキストウィンドウが関係する仕様だろうけど !w(!d) と同様に精密さに欠ける。
 textspeed 0 なら瞬間表示になる。


■文字待ち演出 待ち時間の目安

 速い 150 普通 300 遅い 800 (単位:ミリ秒)
 1000ミリ秒=1秒


■!w(!d) と wait(delay) の使い分け

 テキストを消して画像のみ表示したい時は !w(!d) を使わずに textoff と wait(delay) を併用した方が
 setwindow でテキスト背景を変えるよりも効率が良い。


■PCスペックに依存しない wait 命令

 resettimer と waittimer を組み合わせて使うことが高スペックPCと低スペックPCの処理速度差に左右される弊害が一番少ない。
 wait 系命令の精度は resettimer / waittimer が最も高く、次に wait で、そして最後に !w となっている。


■effectskip を使えば表示中の画像エフェクトはキャンセルされない

 ver.2.91より表示中の画像エフェクトをキャンセル可能になった。
 追加された命令 effectskip を使うことで追加する以前のようにキャンセルされない動作に変更できる。


■マニュアル未掲載 エフェクトカット命令 seteffectspeed

 オフィシャル本「あどばんすどNScripter」にのみ載っている。
 右クリックメニュー(オプション画面)の設定で使うと便利。

 記述例
seteffectspeed 2

 パラメータ内訳
  0:通常(デフォルト)
  1:高速(1/2速度)
  2:瞬時(エフェクトカット)


■テキストと画像表示の非同期

 方法はいくつか考えられる。

 画像タグを利用する( SGP[HP消滅] の目パチの項目に詳しいアニメーション方法が書かれているのでそれを応用する)
 NS栗[HP消滅] の MSpDraw.dll や Andolf物置 の anm.dll のプラグインを使う
 NSLua を使う


■動画再生しながらテキスト表示

 WINTER CROWS のプラグインを使えば可能。


■雨を降らすなどの環境アニメーションの演出はプラグインを使う

 環境演出はその殆どが 君影草工房[HP消滅?] のプラグインで対応できる。

 「雨」と「雪」は snow4nsc.zip で
 「花吹雪」と「落ち葉」は hana.zip を使う。

 「かげろう」は NS栗[HP消滅] の NShake.zip で可能。


■画像エフェクトのプラグイン

 君影草工房[HP消滅?] にもエフェクトのプラグインはあるけれど、 永字八法 とかいくつか公開されたのでメモ。

 公式HPの日記[配布終了?]
 nscrplgin.dll  渦を巻きながら暗転するプラグイン(処理が重い)

 永字八法[配布終了?]
 effectlib.dll  数種類のエフェクトをまとめたプラグイン
 flipeffect.dll  本のページめくりエフェクト数パターン
 trans.dll  砂エフェクトとか


■画面揺らしの判別可能な最小時間

 横揺れ(quakex)・縦揺れ(quakey) 1回あたり 50ミリ秒
 画面揺れ(quake) 1回あたり 300ミリ秒
 1000ミリ秒=1秒


■nega 2 は使わない

 環境依存がありエラー落ちする。


■綺麗な monocro off の使い方

 記述順を工夫すれば綺麗に消す事ができる。

 記述例
bg "*******.jpg",0
monocro off
print 1

 エフェクト 0 番と print が肝。


■画像タグの存在を忘れずに

 覚え始めのうちに transmode 命令で画像の透過方法をあらかじめアルファブレンドに固定してしまうと起こしやすいミス。
 画像タグを使わず背景をスプライトで表示するとバグるので注意。

サンプル画像画像タグを使わなかった状態

 正常に表示するためには画像タグの仕様を把握する必要がある。

 回避方法
lsp 1,":c;*******.jpg",0,0              ;画像タグの種類 コピー
print 1


■print 命令は結構重要な存在

 lsp や csp など使わなくても動作する命令がある為か軽視されがちだけど print は結構重要な命令。
 また、仕様を熟知してないと effect 命令で登録しないと使えないなど柔軟性に欠けるとも思われているがそんなことはない。

 基本的な使い方が固まる前に知るとメンテナンス性の悪いスクリプト組みそうなので老婆心ながら敢えて触れない。
 使い続けていれば何かのキッカケで知る機会が訪れると思う。


■lsp2 は windowback を設定すると monocro と nega の効果を受けない

 ld と lsp は効果の影響を受けるが lsp2 は影響を受けない。


■lsp2 は lsp よりも上の階層になる

 常にテキストウィンドウの真下、ld よりも画面手前に表示される。
 スプライト番号は 0 〜 255 番が有効範囲。それを越えるとバグる。


■MP3 や midi はサポート外

 環境依存が酷いので使わないほうが無難。素直に ogg を使う。

 無理に使って動作不良の質問を掲示板などでしても ogg 使えと言われるのがオチ。
 むしろ、こっちが回避方法を知りたい。


■マニュアル未掲載 音量取得命令 getvoicevol getsevol getbgmvol

 右クリックメニュー(オプション画面)の音量設定を作る場合に便利。
 2ch過去スレ「NScritper Ver.4.00」や うpろーだ の非公式マニュアルにて確認。

 記述例
getvoicevol %200
getsevol %201
getbgmvol %202

 ローカル変数で取得するとセーブデータ毎に差異が出るのでグローバル変数で管理する方がいい。


■dwave と dwaveloop のチャンネルは使い分ける

 dwave は 1 〜 10 チャンネル
 dwaveloop は 11 〜 20 チャンネル
 とした方がミスが少なくなる。


■dwaveloop もループ位置の指定が可能になった

 ver.2.93から bgm 命令と同様に dwaveloop でも

dwaveloop 11,"(1.023)test.wav"

 って記述でループ位置の指定が可能に。これで雨音とか切れ目の無い音のループ再生が簡単に出来る。

 ※仕様でループ位置はセーブしても保持されないっぽいのでカスタマイズが必要と思われる。


■音の演出したいなら NScripterDS

 nscrplg[HP消滅] のプラグイン NScripterDS を使う。(日本語名のファイルは未対応)
 ただ、システムカスタマイズが出来ないレベルじゃ使うのは厳しい。

 試し聞きしたいなら古いverだけど うpろーだ のプラグインの項目にある「NScripterDS.dll ラッピング」を落とせば良いと思う。

 ※DS は DirectSound の略。


■if 文の後ろに mod を入れるとエラー落ちする

 NScripterの命令解釈が違うらしい。

 記述例
if %1 == 100 mod %1,20

 のように記述した場合に起きるエラーは判定が %1 == 100 なのではなくて、

if %1 == (100 mod %1) puttext ",20"

 という感じに 100 mod %1 の演算結果を条件として解釈してるっぽい。

 回避方法
if %1 == 100 : mod %1,20

 mod の前に : を打って命令を区切れば想定した動きをするはず。


■numalias は数字に名前を付ける命令

 用途として主に変数で使われてるけど本質は違う。

numalias OFF,0
numalias ON,1

 命令のON/OFF切り替えに使うとか、

numalias MOUSE_R_btn,-1
numalias MOUSE_wheel_UP,-2
numalias MOUSE_wheel_DOWN,-3
numalias Space,-11
numalias Enter,-19

 ボタンの返り値で使うと便利かもしれない。

numalias l,1
numalias c,2
numalias r,3

 ld 命令を弄った場合にも便利。


■numalias 数字の自動割り当て

 オフィシャル本などで書かれているだけあって今では inc を使った数字の割り当て方法が定着してるけど、
 %0 で統一するとセーブデータが関係する場合にローカルかグローバルなのか見分けがつかなくて困る。

 つーことで、別々の数字にすれば分かり易い。

mov %1,0                     ;開始数字(ローカル変数)
mov %2,1000                  ;開始数字(グローバル変数)

numalias tmp1,%1:inc %1      ;ローカル変数
numalias tmp2,%1:inc %1
numalias tmp3,%1:inc %1
numalias FIN1,%2:inc %2      ;グローバル変数
numalias FIN2,%2:inc %2
numalias FIN3,%2:inc %2

 また、%0 で統一しなければ、こんな感じにローカル変数とグローバル変数が混ざり合っても影響を受けないので扱いがラク。

numalias tmp1,%1:inc %1      ;ローカル変数
numalias FIN1,%2:inc %2      ;グローバル変数
numalias tmp2,%1:inc %1      ;ローカル変数
numalias FIN2,%2:inc %2      ;グローバル変数
numalias tmp3,%1:inc %1      ;ローカル変数
numalias FIN3,%2:inc %2      ;グローバル変数

 更に定義節の最後、gameの直前に終端を書いておけばどんだけ消費してるかも調べ易い。

numalias Local_END,%1:inc %1       ;ローカル変数  終端
numalias Global_END,%2:inc %2      ;グローバル変数 終端

 %0 %1 じゃなくて %1 %2 なのは単に好みの問題。パッと見た時に躊躇無くどっちなのか分からないと意味無いから。


■同じ番号の変数を使っても $ と % は格納される場所が別

 文字変数、数字変数で同じ番号を使っても格納場所が別なのでデータは上書きされない。


■arc.nsa は日本語名のファイルに対応していない

 定義節で nsa と書いているにも関わらず arc.nsa 化したら画像や音楽が開けなくなる原因のほとんどがコレ。
 稀に開けない wav ファイルもあるらしいが、ADPCM などの圧縮 wav ファイルなのが原因だと思われる。

 arc.nsa に入れたらダメなもの
 ファイルサイズの大きい wav ファイル(nsogg.dll または nsogg2.dll を使うならOK)
 動画ファイル(再生できなくなるらしいんで見られたくないなら拡張子を dat とかにして誤魔化す)
 空のフォルダ(ダミーファイルなり入ってないと除外される)
 プラグイン

 新アーカイブ ns2 に移行したのでNScripter本体には同梱されてない。
 arc.nsa 化するツール(nsaarc.exe)は「NScripterドキュメント」の方に入っている。


■新アーカイブ ns2 関連

 主な特長
 arc.nsa では読み込みの遅かった BMP の速度向上
 アーカイブ化しても arc.nsa とは違って定義節に nsa と書かなくても 00.ns2 があれば自動で読み込む
 日本語名のファイルに対応していない

 公式掲示板などに報告されている不具合
 nsadir と addnsadir でアーカイブを読み込むディレクトリが指定できない
 アーカイブ属性付きのフォルダがあると ns2 化に失敗する
 ogg 再生中に ns2 内の BMP が上手く表示できない( jpg や png は問題なく表示できる)
 ns2 アーカイブ内に ogg を入れて使用すると画像操作系の命令で落ちるみたい

 アーカイブ属性付きフォルダの ns2 化失敗に対する回避方法
 対象フォルダのプロパティを開き、詳細設定より「フォルダをアーカイブ可能にする」のチェックを外す。

 BMPファイル使用時のエラーについて(この問題はver.3.03で修正されました)
 未だに改善がみられないので根本的な解決は難しいのだろう。
 仕様と割り切ってBMPは使うのやめてPNGに切り替えた方が余計なものを抱え込まずに済むしストレス溜まらないと思う。
 また、原因はOSのセキュリティに関連しているらしく、画像と音とに分け複数のアーカイブにすれば回避できるらしい。


■ワイドサイズのゲームを作る

 ワイドサイズのゲーム製作については 別ページ で色々と独白してます。興味があるならドーゾ。

 Windows98/me/2000対応版(ver.2.95まで)
 画面サイズは「800×600」「640×480」「400×300」「320×240」の4つ。
 ワイドサイズのゲームは作れない。

 XP以降版(ver.2.96〜)
 画面サイズが自由に変えられるようになり、ワイドサイズも可能に。
 大きい画面サイズで起きていた強制エラーは2011/12/06版で修正され、商業ゲームなどの画面サイズにも対応した。

 ※NScripter−Tips の「初級者向けTIPS」にてアナログモニタで起こる不具合の報告あり。


■対応OSについて

 2010-04-27の日記より引用
現行バージョンはXP以前にも対応してるし、しばらくは続けますが、あと数年ほどでXP以前のサポートを終えると思います。
 (2011/10/15にXP以降版(暫定アーカイブ)がリリースされ、Windows2000以前は対象から外された)

 Windows7の動作保証については、特に明記されているものが添付ファイルや公式HPなどで見当たらないようだが、
 日記で動作チェックが行われていた(おそらく旧日記に書かれている。現在使われている日記では確認できない)以外に
 NScripterを使った商業ゲームの中で対応OSとして明記されているものがあるので保証内とみて良いと思う。

 Windows8については2012/10/12にTwitter上で動作確認の報告がつぶやかれた。


■ワイドモニターでフルスクリーン表示

 アスペクト比が狂って横伸びするなど画面表示の障害を抑制する命令はNScripterに存在しない。
 XP以降(暫定アーカイブ)2011/12/15版でフルスクリーン表示の抑制を確認。
 最新版なら画像が伸びるようなことにはならないはず。

 画像が伸びる場合は以下の対応が考えられる。
 モニタ側で抑制する機能を備えてたり、使ってるグラフィックカードの設定変更。
 詳しくは「ワイド画面 スケーリング」などのワードでググって参考にする方が分かり易い。


■動画再生が荒い

 公式掲示板ではWindows7での動画再生で報告されているが原因がAeroにあるためVistaでも起こりえる現象と思われる。
 Vista以前のPCは動画再生にハードウェアオーバーレイを使い動画再生していた。
 Aeroはオーバーレイが無効になっている為ジャギ―などの劣化が起こるようだ。

 回避方法(Windows7)
 特定のアプリケーションのみAeroを無効にするには実行ファイル(nscr.exe)を右クリックして「プロパティ」を開く。
 「互換性」タブにある「ディスクトップ コンポジションを無効にする」にチェックを入れて適用。
 これでアプリケーション実行中はAeroが無効に。終了時には自動で有効に戻る。


■OSにフォントを大量にインストールしていると不安定になる

 かなり前に遭遇した症状なので今は直っているかもしれない。
 一時期フォントにハマって300近くインストしたらNScripterが不安定になった。

 不安定になると○○ゴシックとか○○明朝といった固有デザインでは表示されなくなる。
 変わりに「ゴシック」「明朝」「丸文字」的なフォントで表示された。
 毛筆体とか江戸文字とか変わったフォントで表示してみれば正常かどうか判別し易い。

 他に強制終了して起動しないとかあるらしい。



mail
inserted by 2nt system