NScripterの「非推奨命令」について
(書いた日:2018/11/22)
(最終更新:2018/11/23)

前置き
  • このページについて

  • 本題
  • もう用いる意味が本当に一切無い命令
  • 動くがバグを抱えている命令
  • まともに機能しない命令
  • 厄介な挙動の命令

  • 何が言いたかったのか
  • windowchipを愛してあげてください

  • このページについて

    一口に非推奨命令といっても事情は様々だよというページ。

    公式に非推奨とされる命令、非公式マニュアルにおいてのみ非推奨とされる命令、どちらも扱う。 各マニュアルで一切触れられていない非公式命令(mode_○○等)の中には人知れず歴史に埋もれたものや今では動かないものが複数あるかもしれないが、それらは扱わない(僕が知らないため)。
    この背景色の場合、NSLaにおいては非推奨命令ではない。

    もう用いる意味が本当に一切無い命令

    古い音楽/ムービー再生命令群
    歴史的経緯から無数に存在するが何も知らなくてよい。
    僕も覚えていないし現役の利用者もみんな忘れています。
    @bgmで音楽を鳴らしdwave/dwaveloopで効果音を鳴らす。フェードや音量調整は関連命令を使う
    ANScripterDS使用時はnds命令で音回りを賄う
    B動画再生にはmovieを使う
    Cスプライトとして動画を再生したければプラグインを使う
    他は何も使わないし、知る必要も思い出す必要もない。

    insertmenuのWAVEOFF / WAVEONやCD-DA周りも同様に歴史に埋もれていった。
    ってかCD-DAって何です?と僕は思っている※。
    (※CDから音楽をストリーミング再生する機能だとかなんとか。「たかだか数百メガバイトの容量」が深刻にHDD容量へ響く時代が歴史上たしかに存在した。僕のかつての相棒であり今は部屋に眠っているWindows98ノートPCは驚きの総容量8GBだが、当時としては頑張っていた方らしい。今でもタブレットや電話で、分かるだろ?)
    旧きプラグイン周り
    arc等。現在は公式dllを勝手に読み込むし、画像周りはみんなでpng使おうぜとなっている。
    bmpのマスク云々はもう必要ない。透過pngが全てを飲み込むであろう。
    logsp
    なんか意図通りに動かないケースがあるらしい。logsp2が上位互換なのでそっち使えばいいとのこと。歴史の中に眠れ。

    動くがバグを抱えている命令

    notif
    not演算子的に用いる意図で作られた命令だと思われるが、
    ||(or)実装あたりで致命的に直感的ではない挙動になるケースが出てきたように記憶している。

    そもそも見づらいという問題もある。
    括弧を使うような複雑な条件式にNScripter本体のifは対応しておらず、「not A && B」の指す意味(notの掛かる範囲)が分かりづらい……といった問題も。

    単純な条件指定であれば今でも動くはずだが、
    not(A>B)はA<=Bであるしnot(A==B)はA!=Bなのだからそのように書けばよい。
    jumpf/jumpb
    「前後の"~"」より正確には「前後の"\126"」にジャンプする命令。
    NScripterが用いる文字コードはsjis。
    sjisにおいて、\126は一部2バイト文字の後半に含まれているコード。
    そしてjumpf/bのジャンプ先は、行頭・命令頭「に限らない」。
    ;下手にjumpfで通過すべき地点に注釈を入れると、
    ;注釈内部の\126に誤爆するリスクがある。
    なんでこんな仕様にしたんですか?
    僕は今でも使うが、ラベル上限を変えられるようになった現在では素直にラベルを書いてgotoさせるのが最も無難。
    prnum / prnumclear
    「縦横サイズがそれなりに異なると文字(数字)の一部が欠ける」というバグを抱えている。
    「表示できる上限が3ケタ(正確には桁の左から3つまで)」という仕様も抱えている。
    prnumclearで一斉に消すしかない(個別に消す手段がない)。
    mode_saya(スプライト0〜9番と数字ラベルにwindowchipが施される、事実上の非推奨命令)以外で「一時的に隠す」手段がない。

    これもう全部文字スプライトでいいんじゃないかな?という理由で非推奨になっている(歴史的経緯を知らないが、登場順がおそらく前後するのだろう)。

    扱う数字が3ケタ以下であり、かつ指定する縦サイズと横サイズが(ほぼ)同じなら、こいつは一応現在のバージョンでも元気に動く。
    スプライト1000個使い切ってまだ足りねえ!のような状況はまず無いはずだが、僕はこいつをあまり憎めない。
    effect:[16/17](モザイクアウト/イン)
    ウインドウサイズをワイド比率にするとちゃんと描画できないらしい。
    現代のノベルは大抵ワイド比率らしいので非推奨命令行きになってしまった。
    代替命令としてmosaicout/mosaicinが用意されている。
    モザイクアウト/インからして多用するものでもないし、それで誰も困らないのだろう。

    まともに機能しない命令

    tateyoko
    割とあっさりバックログが壊れるらしい。
    ってことは標準バックログを使わないなら問題ないのか?
    ノベルで縦書きテキストなんて島に伝わる不吉なわらべ歌を表示したい場合くらいだろうし仕方ないよね。
    手紙とかの演出には使えそうだが、なんかもう縦書きの手紙が絶滅しつつある気もしないではない……
    面白い演出できそうな雰囲気だけを残していった惜しい命令。
    insertmenu:[CLICKPAGE]
    恐らくはNScripterが今より原始的であった時代の遺物であり、
    「ページ末まで表示」は思ったようには機能しないらしい。
    仮にそのような機能が欲しければテキスト周りを乗っ取る事になる。
    でも現代のノベルはどうせ1ページ高々4行くらいの下部ウィンドウなんでしょ?
    zenkakko
    愛されていた命令であろうと思うが、動かなくなったものはどうしようもない。

    ややこしい挙動の命令

    gettab / getfunction:[F10]
    命令自体に問題はないが、Windows標準の機能とかち合う。
    gettabgetfunction:[F10]
    Alt+tab(アクティブ窓を切り替える)と干渉する。tabキーを用いたショートカットは結構多いので、基本的に使用を控えた方がよい。 F10(デフォルトの上部メニューへフォーカスする)と衝突する。
    上部メニュー非使用時にF10を押すと、NScripterが一時停止する(Altと同様に、何もない場所にフォーカスしているのかも)。
    そしてこのF10によるフォーカス(/一時停止)、getfunction使用中は発生しない。
    ゲーム内でgetfunctionが有効であったり無効であったりする場合、F10キーを押した際の挙動が一貫性を欠く。
    getfunctionは神経質に気にするのでなければ(あとゲームを一時停止されて困るシチュエーションが無ければ)使っても問題ないと思う。
    どちらかというと旧でない方のボタンを使う人が気に掛けるべき仕様かも?
    windowchip
    指定した番号のスプライトは
    「テキストウインドウが消えた瞬間に消える」
    「テキストウインドウが現れた瞬間に表示状態になり、その場で描画される」
    この2つの機能を持つようになる。

    「systemcall windoweraseするとwindoweraseの直後に紐づいたスプライトが一斉に表示される」という挙動はスクリプトの組み方次第で不便。
    他にも、使っていて「あれ?」と思う挙動が何か1つあった気はした(けど忘れた)。

    僕は世間で言われているほどこいつが非推奨命令だとは思わない。袋文字を作ったりテキストを乗っ取ろうとするなら半ば必須だし、袋文字実装手段の一つであるNSfukuroでも使われているし、僕もNSLaでがっつり使っている。
    rubyon2
    「ルビがある行だけY字間を空ける」って挙動がそもそも見た目的にあんまり美しくないと思う。 何か不具合もあるらしいけどよく知らない。
    bgalia
    何こいつ?
    「窓サイズと合っていない背景画像は、通常中央に表示される」
    「bgaliaを使うと表示位置を指定できる」
    「ただし、窓サイズと合っていない背景画像は、ロード後に左上に寄ってしまう」
    本体仕様の犠牲者。
    窓サイズと合わない背景がどうしても欲しければ素直にスプライト使おうね……
    definereset
    Luaを死ぬまで用いないという固い決意があるなら使っても構わないが、NScripterはsystem.luaを起動時の一回しか読まない。defineresetとLuaとの相性は最悪である。

    windowchipはそんなに悪い子ではない

    あとprnumも一応動く。
    いいね?

    ガラスグサに戻る