lMesリファレンス
lMesはHSP3のHGIMG4やDISHで動作する文字列描画拡張モジュールです。
Windows版での動作を想定しています。
注釈
lmes2はlmesに統合されました。
lmes2と同様の記述方法を実装したい場合は、マクロで記述することをおすすめします。
注釈
version 20210614から命令名重複を避けるため、一部の命令名が変更になりました。
例
lOption → lmOption
注釈
HSP3.6bate5 HGIMG4での動作を確認しました。
HSP3.6bate5 DISHでの動作を確認しました
利用規約
lmes.as のモジュールを利用する際は以下の規約を必ず守ってください。
著作者及び利用規約表示義務
本モジュールの著作者としてのyoudaiの名前を readme.txt 及びスタッフロールやクレジットに表記する事
文字列表示に lmes.as を使用している旨の表記をする事
公式ウェブサイトのYOUDAI ZONEの名前とURLのhttp://youdaizone.webcrow.jp/を表記する事
この利用規約に従って利用した事を表記する事
改造許可
改造は自由にして構いません。ただし、著作権表記や利用規約の部分は改変してはいけません。
再配布許可
この利用規約に従えば再配布は自由にして構いません。
使い方
lmes.as をインクルードすること。
概念
レイヤー機能
lmesは、mes命令のようにカレントポジションに描画するという形式ではなく、レイヤー(モジュール型変数)に描画する形式です。
これにより、表示する文字を自由に移動させることもできます。
mes命令との違い
mes命令は実行したタイミングで描画されますが、lmesは実行したタイミングでは描画されず、設定されるだけで、lmDrawを実行したタイミングで一度に描画されます。
これにより、スクリプト上の任意の位置で表示する文字列を設定することが可能になり、自由にスクリプトを記述することができるようになります。
文字表示に関する総合的なモジュールになった
lmesは当初はスクリプト矯正の目的で作成したモジュールでしたが、version 20210614からは既読処理や一括での非表示やスクロール表示等の機能の追加により、文字表示に関する総合的なモジュールになりました。
一括設定を推奨
ゲームを起動した際に、ゲーム内で使用する文字列を一括で全てlmesに読み込んで設定しておくことを推奨します。
文字列を表示する都度ハードディスクから文字列情報を読み込むよりも、全ての文字列を一度メインメモリ上に蓄積しておいた方が動作パフォーマンス的に優れています。
メモリの使用量ですが、例えば単行本一冊程度の文字列でも1MB~20MB程度ですので動作パフォーマンス的にはほとんど問題ないと思います。
音声と同期させることが得意
スクロール部分は文字列の長さと連動した実数で制御しているため、音声と同期させることが得意です。
また、文字列の長さと関係なく、一定のスクロールスピードで表示したい場合はscrollTimeSpeed関数を使って、scrollに加算するスピードを変換することでスピードを制御することができます。
既読データの保存に関して
ユーザーがどのような環境でlmesを使うか不明なため、既読データの保存に関してはあえて実装していません。
例えばbsave、bloadを使える環境の場合は以下の方法で可能です。
lmesGetで既読情報を取得して、bsave等でそのデータを保存すれば既読データの保存ができます。
既読データの再設定についてはbloadで読み込んで、lmKidokuCountSetで既読データを設定するという方法で既読データの再設定が可能です。
lmesはモジュール型変数系命令
lmesはモジュール型変数系命令です。
使用するには、newmod命令でモジュール型変数を作成します。
詳しくは.hsのコマンドリファレンスやsampleを参考にして下さい。
例
newmod layer_0000, mod_lmes
注意
lmesは直接描画命令
lmesは直接描画命令です。
直接描画命令はHGIMG4やDISHではその制約上、bufferに対して描画できません。(通常のbufferとオフスクリーンバッファは異なるものです)
lmdrawはなるべく、screen ID0に対するredraw 1の直前か、オフスクリーンバッファに対するredraw 1の直前に実行しましょう。
オフスクリーンバッファで描画時の特徴
bufferのオプションにscreen_offscreenを指定すると、そのbufferはオフスクリーンバッファという通常とは異なるバッファになります。
このscreen_offscreenのバッファにおいては、直接描画命令が可能です。この場合、描画されるタイミングはscreen ID0のredraw 1が実行されたタイミングになります。
この性質については、lmesをscreen_offscreenのバッファに対して描画した場合でも同様です。
オフスクリーンバッファに対して実行したlmdrawは、実行したタイミングでは描画されません。この場合の描画されるタイミングは、screen ID0のredraw 1が実行されたタイミングになります。
l(エル)mes
lmesはlayer messageの略です。
lはI(アイ)ではなく、エルです。
間違えやすいので注意して下さい。
version 20210614の新機能
スクロール表示が可能になった
version 20210614からスクロール表示が可能になりました。
レイアウトの再利用が可能になった
version 20210614からlmesSetでlmesが再設定できるようになりました。
これにより、レイヤーのレイアウトの再利用が可能になります。
既読システムが実装された
既読システムが実装されました。
一度読み込んだレイヤーは既読がカウントされ、既読文字色に変更され、高速表示されます。
また、既読システムはオンオフを任意のタイミングで切り替えることが可能です。
レイヤー非表示の機能が実装された
全てのレイヤーを一度に非表示にする機能が実装されました。
draw処理をスキップするため、非表示状態では負荷がかかりません。
テクニック
空(から)のレイアウトを作成する
lmesで文字列が存在しない空のレイアウトを設定しておいて、lmesSetで後から文字列を再設定することができます。
これは文字列が未定や不定の場合、有効なテクニックです。
例えばアイテム一覧を表示する時、アイテム欄の空のレイアウトだけ作成しておいて、アイテム名については後から設定するなどの使い方が可能です。
また、そのレイアウトはそのまま再利用することが可能です。
移動する文字列を作成する
lmDrawのポジションを変更すれば、移動する文字列を表現できます。
文字列の一部の色を変更する
例えば、レイヤー1の文字列が「あいうえお」だとします。文字色は白です。
レイヤー2の文字列が「 う 」だとします。文字色は赤です。
レイヤー1を先に表示して、後にレイヤー2を表示すればうの文字だけが結果的に赤く表示されます。
レイヤー1とレイヤー2の座標は同一である必要があります。
この方法であれば、文字列を直接移動させるよりも簡易的に部分文字色変化が実装できます。
レイヤー1とレイヤー2のスクロール係数を同じものにすれば、スクロールにも対応できます。
また、赤い部分の点滅も同様の方法で簡単に実装できます。
クリックでスクロールをスキップする
例えばマウスのボタンや、キーボードのボタンを押した時にスクロール表示をスキップしたい場合、draw系のscrollの値を1.0にすれば結果的にスクロールがスキップされたことになります。
特定のレイヤーを既読表示無効にする
簡易的な方法
既読文字色を通常文字色と同一にすれば、既読時でも文字色に変化がしないことに結果的になります。
ただし、スクロールのスピードはスキップされてしまうことには注意してください。
完全な方法
既読システムを無効にしたいレイヤーのdraw前に既読システムをオフにしてください。
こうすれば、スクロールのスピードもスキップされなくなります。
バックログの実装
文字列は通常表示と同じなわけですから、変更するのはレイヤーのレイアウトとlmesのポジション変更だけで十分です。