HSPで良タイ! HSP で良質のタイプソフトを制作するためのプラグイン Copyright (C) Suzumizaki-Kimitaka(鈴見咲君高) 2002 ■概要 HSP(Hot Soup Processor) は比較的簡単にゲームを開発できるプログラム言語として 人気があります。 ところが、現時点( ver. 2.55 )ではタイピング練習ソフトを作るにあたって一つ厄 介な問題があるようです。 標準命令でプレイヤーのタイプしたキーを判定するには getkey 命令を使うしかあり ませんが、 getkey は飽くまでその瞬間のキーの押下状態を取得するものです。 従って getkey を使う場合は、キー入力を受け付ける間はできるだけ他の処理は挟ま ないようにしなければなりません。他の処理が多く挟まっていればいるほど、キー入 力の取りこぼしが発生しやすくなるからです。 つまり、普通に作ると入力待ちの間の演出が一切できなくなってしまうのです。 そこで。 入力判定ループの中に他の処理を入れても、キー入力の取りこぼしを発生しないよう にするためのプラグインを制作いたしました。それが当プラグイン ryoutai.hpi こ と「HSP で良タイ!」です。 ■対象機種 Hot Soup Processor ver. 2.55 が動作する環境。 Windows 95〜XP で動作する、はず。 HSP の以前あるいは以後のバージョンでも HSP の仕様が同一であれば問題ない、はず。 ■使用方法 他の HSP 用プラグインと同様です。 1. 開発中は ryoutai.hpi を hsp2.exe と同じフォルダに置いておく必要があります。 2. プログラムソースファイルに #include "ryoutai.as" を書きます。 3. あとは本書の命令詳細や添付のサンプルを参考にしてプログラムを作っていきま しょう。 4. 完成した exe ファイルを配付するときは ryoutai.hpi も一緒に配付することを 忘れずに。packfile に含めるのは exe ファイルのサイズが大きくなるだけで無意味 です。 ■命令一覧 初期化系 szm_keysetup ryoutai.hpi を初期化します。 szm_keyerrorflag 過去に内部でエラーが発生したかどうかを取得します。 szm_keycleanup ryoutai.hpi を未使用状態にします。 入力情報取得系 szm_getstrokeinfo キーオン/オフ情報を一つずつ取り出します。 szm_getnewkeyon キーオン情報のみを一つずつ取り出します。 szm_getkeystate 最後に取り出した情報と同時刻におけるキーの状態を取得 します。 szm_setkeyinfomask 情報取得対象キーを変更します。 szm_getkeyinfomask 情報取得対象キーの現時点の設定を取得します。 szm_resetkeybuf 内部のキーオン/オフ情報を再初期化します。 補助情報系 szm_getkeyname キー情報に対応する文字を取得します。 szm_setknall szm_getkeyname で返す情報の定義を変更します。 szm_getknall szm_getkeyname で返される情報を全部まとめて取得しま す。 ■命令詳細 ◇szm_keysetup このプラグインの初期化を行います。この説明書の他の命令群を使う前に呼び出 してください。 ◇szm_keyerrorflag stat にこれまでバッファが溢れたかどうかが返されます。 1 ... バッファが溢れたことがあります。 0 ... バッファが溢れたことはありません。 この情報はこの命令が呼び出されると 0 にリセットされます。 szm_keysetup の実行によってもリセットされます。 szm_getkeystrokeinfo や szm_getnewkeyon でプラグインが値を返すためには、 プラグイン側で情報を溜めておかなくてはなりません。この情報を溜めきれなく なる状態が発生したあとこの命令を呼び出したときに 1 が返されます。 ◇szm_keycleanup このプラグインのクリーンアップ関数です。プログラムの終了時に自動的に呼び 出されます。 通常は使用する必要はありません。 ◆szm_getstrokeinfo p1 p1 に数値型変数を指定してください。その変数に値を返します。 stat にも値が返され、その値は次の意味を持ちます。 0 ... プラグインの管理するキーバッファに文字がない。p1 は無効。 2 ... p1 で示すキーが押された。 3 ... p1 で示すキーが離された。 つまり、通常は stat が 2 もしくは 3 の時にのみ処理すればいいことになりま す。 szm_setkeyinfomask で指定されたキーについてのみこの関数から情報を得られ ます。 ◆szm_getnewkeyon p1,p2 p1 に数値型変数を指定してください。その変数に値を返します。 p2 には以下の値を指定できます。指定しなければ 0 として扱います。 0 ... オートキーリピートによるキーオンは返しません。 1 ... オートキーリピートによるキーオンも返します。 stat に値が返され、その値は次の意味を持ちます。 0 ... プラグインの管理するキーバッファに文字がない。p1 は無効。 2 ... p1 で示すキーが押された。 通常は stat が 2 の時のみ処理すればいいことになります。 この命令を使うと、キーが離された(キーオフ)情報はプラグイン内部で処理さ れるのみとなり、キーが押された(キーオン)情報のみを得ることができます。 p1 の値についての詳細は szm_getstrokeinfo と同じです。 p2 でオートキーリピートによるキーオンも返す指定を行った場合を除き、キー を押しっぱなしにすることで得られたキー情報は内部で処理されるのみとなりま す。 キーオフ情報やオートキーリピート情報を内部処理した結果、返す情報がなくな ったという場合は stat に 0 が返されます。 この命令と szm_getstrokeinfo の情報は一元的に管理されています。両方を併 用してもかまいませんが、一方で得た情報がもう一方で再度得られることはあり ません。 また、この命令で内部処理されたキーオフの情報、およびこの命令で内部処理さ れたオートキーリピートの情報も szm_getstrokeinfo からは返されません。 ◆szm_getkeystate p1,p2 p1 には数値型の変数を指定してください。 p2 はキーコードを示す値を指定します。HSP 標準命令 getkey の説明を参照く ださい。 p1 には指定キーが押されていれば 1 を、押されていなければ 0 を返します。 HSP 標準命令の getkey と同様の処理をする関数ですが、マウスボタンは反応し ません。 また、最後に実行された szm_getstrokeinfo または szm_getnewkeyon で得られ た情報の時点での状態が返されます。 標準命令の getkey を使ったときのよう に取りこぼしが発生する可能性はうんと小さくなります。 この命令は szm_setkeyinfomask の指定の影響を受けません。 ◆szm_setkeyinfomask p1 p1 には 数値型の 257 個の要素を持つ配列を指定してください。 szm_getkeystrokeinfo および szm_getnewkeyon で返されるキーコードの値を制 限する情報を設定します。 配列の添字番号がキーコード番号に対応します。値に 1 を指定したキーコード のみが上記の二つの関数から返されます。 0 を指定したキーコードは内部で処 理されるのみとなります。それ以外の指定はエラーとなります。 0 を指定したところも内部処理はされますので、 szm_getkeystate で状態を取 得することは可能です。 この関数が一度も使われていない状態のときは、 ・アルファベット ・矢印 ・数字 ・スペース ・Enter ・BackSpace ・Delete ・ESC ・F1〜F24($70〜$87) ・テンキー上の各キー($60〜$6f) ・-^\@[;:],./_ が 1 、他はすべて 0 が指定されています。 ◆szm_getkeyinfomask p1 p1 には 数値型の 257 個の要素を持つ配列を指定してください。 szm_setkeyinfomask での設定をそのまま返します。一度も指定されていなかっ た場合、プラグインとしての標準設定が返されます。 ◆szm_resetkeybuf szm_keyerrorflag で 1 が返されるような状態になっても、 Windows 全体とし て処理が追いつくようなら szm_getkeystate は正常な値を返します。ところが Windows 自身でも取りこぼしがでたような場合はそうもいかなくなってしまいま す。この命令はその状態の解消のためにも使えます。 □szm_getkeyname p1,p2,p3 p1 には変数を指定してください。文字型でも数値型でもかまいません。 p2 にはキーコードを指定してください。 p3 には参照するテーブル番号を指定します。通常は 0 がシフトキーなし用、1 がシフトキー押下時用です。 szm_getstrokeinfo や szm_getnewkeyon が返したキーコードに対応する可視文 字を返します。 p2 が通常の文字キー(テンキーの数字・記号含む)であった場合は相当する文 字を返します。それ以外の時はスペースを返します。 p1 が文字変数であればその文字(1バイト)が、数値変数であれば 0〜255 の該当 値が返されます。 □szm_setknall p1,p2 p1 には257バイト以上の大きさの文字変数を指定してください。 p2 には変更対象のテーブル番号を指定してください。番号は szm_getkeyname のそれに対応します。 szm_getkeyname が返す値を一括して変更します。 □szm_getknall p1,p2 p1 には257バイト以上の大きさの文字変数を指定してください。 p2 には取得対象のテーブル番号を指定してください。番号は szm_getkeyname のそれに対応します。 szm_getkeyname が返す値を一括して取得します。 ■利用規定 当ソフト「HSPで良タイ!」を使用した際に生じたいかなる障害についても、鈴見咲君高は 一切の責任を負わないこととし、使用した時点でこのことを了解したものとみなします。 再配布可能な形式は次の二通りとなります。 1. 本書が含まれる書庫ファイルをそのまま再配布する。 2. ryoutai.hpi を利用したソフトウェアが、そのソフトウェアの一部として ryoutai.hpi(のみ)を配布する。 上記 1. 2. 以外の配布方法は認められません。つまり、サンプルプログラムに使用され ているデータ類を元の書庫以外の形で配布することは禁止いたします。無論、サンプル プログラムの一部を利用・応用してソフトウェアを作成するのは問題ありません。 当ソフトに関して事実と異なる認識を生じさせるような行為はその一切を禁止します。 以上の条件を守っていただければ、有償無償を問わず配布は自由とします。 サンプルプログラムに使用した "シソ科のみ.csv" は やし(岡本茂治)さんの製作され た"植物学名対照DataBase(Ver.7)" の 1.7MB のテキストデータからほんの一部を取り出 したものです。 それ以外のプログラムソース・音楽データ・効果音データ・および本書は鈴見咲君高が 独自に作成しました。 ■連絡先 メールは suzumizaki@excite.co.jp まで。 一次配付元は http://suzumizaki.tripod.co.jp/ryoutai/ です。 ■補足 HSP version 2.55 のマニュアルには、すでに onkey という命令が仮実装され、最終 的には onkey gosub なる命令が実装される旨の説明があります。 これを利用すれば、当プラグインを使わずとも目的は達成できるかもしれません。 ただし、 ・現時点では onkey の仕様が定まっていない。 ・現時点では onkey gosub が実装されていない。 ・すでにタイピングソフトが完成している場合は再プログラミングがちょっとややこ しそう。 …ということで、当ソフトの存在意義が全く消滅するということもないでしょう。 余談になりますが、このソフトを作るきっかけは… http://www.vector.co.jp/authors/VA011751/software/himeodorikosou/ ■履歴 2002/09/12 version 1.0000 初版。