NScripterに触れているとよく耳にすると思いますシステムカスタマイズ(俗称:シスカマ)ですが、
「結局それって何?」「意味あんの?」「よくわかんないから聞きたくない」
という印象を持っている方がいるかもしれません。
このページでは理解の助けとなりそうな簡単な説明を書いていくことができればと考えています。
システムカスタマイズとは、単に「textgosub」という命令を使っている状態を指します。
同じくpretextgosub・loadgosub・cselを使っている状態も指して構わないとは思うのですが、
これらはtextgosubを使ってからのステップアップで使われることが多い命令ですし、
少々乱暴ですが、textgosubを利用している状態がシステムカスタマイズであると考えてください。
(余談 個人的にはシステムカスタマイズなんて仰々しい名前を付ける必要もない普段通りのスクリプトに見えます。
( 実際、スクリプトの中身はタイトル画面などを作る際のボタン待ちとやってることほとんど同じですし。
「textgosub」では、¥や@時のキー入力待ち動作を自分で作ることが出来ます。つまり――
たとえば、「マウスホイール下回転で読み進め」というここ10数年で常識的となったノベゲ動作も、
システムカスタマイズを行うことによって実装することができるのです。
それどころか、ホイール上回転で読み進め、左クリックはバックログ、右クリックでゲーム終了という
目茶苦茶な操作方法に設定することまで可能です。(※こういうことは絶対にやらないでください)
また、自分で綺麗なセーブ画面を作成して、あるキーを押せばその画面にgosubするということも可能です。
このように自由に動作を決められるため、貴方の思い通りにプレー環境の改善を行うことができるのです。
手抜きのイメージ画ですが、例えば下記の画像例のようなものが作れるようになります。
この例では、キャラクター名ウィンドウが出ていたり、発言者の表情をウィンドウに出したり、
ウィンドウの下部にセーブ・コンフィグ・ウィンドウ消去などのボタンが付いていたりしています。
右クリックメニューも自作してグラフィカルなものに差し替えています。
NScripterのデフォルト状態では無理なこういったものをシステムカスタマイズで実装できます。
上記画像を作る際に利用させていただいた素材
背景:背景素材店 http://shass.sakura.ne.jp/
立絵:いずみ亭 http://www8.plala.or.jp/izumitei/
地紋:STARWALKER STUDIO「同人誌やイラストを美しく魅せるデザイン100の方法」収録テクスチャ
NScripterは最初から右クリックやセーブロードなどのメニュー類やオートなどが最低限整っていますね。
そして左クリックで読み進め、ホイール回転でバックログ表示など、キーに対応する動作をしてくれます。
しかし、システムカスタマイズをするとその全てを自分で構築しなければいけなくなります。
まさに「オール・オア・ナッシング」。自分で全て書いていかなければその動作は消滅してしまいます。
上手く組めないままリリースしてしまうと、バグだらけで最後までプレーしてもらえないかもしれません。
つまり、実際にやりたいことを実現できるかは貴方のアイデアとスクリプトの腕次第なのです。
やらなくても全く問題ないです。作りたい作品によりますので人それぞれと答えるのが正しいでしょう。
ただ、「マウスホイール下回転で読み進め」程度は最低でも欲しいので私個人としては必須といえます。
まずはデフォルトのNScripterにホイール下回転を加えただけのサンプルを書いてみます。
これを叩き台に、ウィンドウ周りのボタンを加えたり、セーブ画面などの自作に挑戦したりしてみてください。
タイトル画面の作り方で触れたようなボタン待ちのブロック構造はここでも使います。
;mode800,value1000
;===============================================================================
;定義節
;===============================================================================
*define
nsa
globalon
kidokuskip
humanz 500
windowback
shadedistance 1,1
effectcut
usewheel
useescspc
maxkaisoupage 50
mode_wave_demo
;-------------------------------------システムカスタマイズ
textgosub *text_lb
;-------------------------------------
caption "シスカマ基本サンプル"
defaultspeed 0,25,10
automode
automode_time 2000
resetmenu
insertmenu "終了(&X)",END
insertmenu "バージョン情報(&V)",VERSION
insertmenu "リセット(&R)",RESET
insertmenu "オート開始(&A)",AUTO
insertmenu "選択肢までスキップ(&S)",SKIP
insertmenu "各種設定(&C)",SUB
insertmenu "ボリューム設定(&V)",DWAVEVOLUME,1
insertmenu "スキップ設定(&S)",SUB,1
insertmenu "全て",KIDOKUOFF,2
insertmenu "既読のみ",KIDOKUON,2
insertmenu "フォント(&F)",FONT,1
insertmenu "テキスト速度(&T)",SUB,1
insertmenu "瞬間表示",TEXTSLOW,2
insertmenu "普通",TEXTMIDDLE,2
insertmenu "早い",TEXTFAST,2
insertmenu "画面(&W)",SUB,1
insertmenu "フルスクリーン",FULL,2
insertmenu "ウィンドウ",WINDOW,2
savenumber 20
menusetwindow 20,20,0,0,1,1,#CCCCCC
rmenu "文字を隠す",windowerase,"回想",lookback,"次の選択肢に進む",skip,"セーブ",save,"ロード",load,"タイトルへ戻る",reset
game
;===============================================================================
;実行節
;===============================================================================
*start
erasetextwindow 0
setwindow 20,20,29,16,26,26,0,9,5,1,1,#aaaaaa,0,0,799,599
textspeeddefault
;-----------シナリオダミー
色は匂へど散りぬるを@
我が世誰ぞ常ならん@
有為の奥山今日越えて@
浅き夢見じ酔ひもせず¥
以呂波耳本へ止@
千利奴流乎和加@
餘多連曽津祢那@
良牟有為能於久@
耶万計不己衣天@
阿佐伎喩女美之@
恵比毛勢須(『金光明最勝王經音義』)¥
クリックで終了します。¥
end
;===============================================================================
;システムカスタマイズ
;-------------------------------------------------------------------------------
;(¥または@到達でこのラベルにgosubされます)
*text_lb
;---------------基本設定&画像設定
saveoff;(autosaveoffしてない場合は書いておこう)
;(画像があればここに挟む(クリック待ちアイコンなどもここ※1))
;---------------ボタン設定類
*text_lb_loop
btndef clear
;(ボタンがあればここで設定)
getmclick
;---------------キー待ち(通常のbtnwaitではスキップ時に止まってしまうのでtextbtnwaitを使う)
textbtnwait %0
;---------------キー判定
if %0 == 0 goto *text_lb_end ;左クリック or ENTER or SKIP中
if %0 == -1 systemcall rmenu:goto *text_lb_loop ;右クリック
if %0 == -2 systemcall lookback:goto *text_lb_loop ;ホイール上回転
if %0 == -3 goto *text_lb_end ;ホイール下回転
if %0 == -10 systemcall rmenu:goto *text_lb_loop ;Escキー
if %0 == -11 goto *text_lb_end ;スペースキー
if %0 == -70 systemcall windowerase:goto *text_lb_loop ;中クリック
goto *text_lb_loop
;ここに辿り着くということはキーが合わなかったということなのでループに戻します
;「読み進め」に対応するキーだった場合にシナリオに戻る処理をします
*text_lb_end
texec;(※ ¥の場合にtextclearを内部で呼んでくれる)
saveon;(autosaveoffしてない場合はtexec直後に必須)
return
;gosubされて飛んできてますから最後はreturnで帰ります
今回は各機能をsystemcallで呼びだしてNScripterが用意している機能を使っています。
上達していきますと、機能そのものを自作してgosubで全て置き換えるようになるでしょう。
ウィンドウ周りにボタンを配置してそこに機能を割り当てていくことも考えられますね。
また、変数の被りを警戒するようになれば、numaliasで定数を設定して、
たとえば textbtnwait %btn といったように重複しないような形にしていくと思います。
このように、システムカスタマイズに関連して一気にスクリプトが上達していきます。
ここでは概要を理解することがねらいでしたので、簡単な説明コメントだけで例示してしまっています。
実際に習得する際には道しるべにて書いたようにQWERTIONさまやnscrさまの講座をオススメします。
さらに、貴史たま+MEさまやwithout limitさまのサンプル実例を読み込んでみましょう。
(追記 2013/06/16)
※1……「クリック待ちアイコン」について
シスカマ後はデフォルトのsetcursorが機能しなくなるために自作する必要があります。
アニメスプライトとして事前にlspしておいたものを操作します。
例)@¥判定(ispage)→座標取得(getcursorpos)→移動(amsp)→表示(vsp ?,1)/非表示(vsp ?,0)→描画(print 1)
大抵のケースで、そういった操作を挟むポイントが※1の地点になると思います。
NScripterのスクリプタとしてはここからが真のスタートと言ってしまっても過言ではないでしょう。
コンフィグ画面を作ってその設定の内容によって色々と動作を変えていったり、
オートの待ち時間をテキスト数×100ミリ秒に設定したり、オート解除の方法を選べたり、
選択肢をグラフィカルにしたり、進行度によってインターフェイスのデザインを変えたりと、
ここには書ききれないほど、アイデア次第でいくらでも好きに作り込むことができます。
この段階までくれば、defsub命令の便利さに飛びついている頃だと思いますし、
立ち絵加工やインターフェイスの編集など、色々な制作スキルが身に付き始めていると思います。
デフォルト状態のNScripterを使っていた頃では考えられないほど視野が広がりますので、
ぜひシステムカスタマイズに、そして色々な機能作りに挑戦してみてください。
作り込めば作り込むほど作品の質が上がっていく手応えはやみつきになりますよ!