; ; HSP help manager用 HELPソースファイル ; (先頭が「;」の行はコメントとして処理されます) ; %type 拡張命令 %ver 0.12 %note 当プラグインに関する質問、要望などはSinagawaへお願いします。 URL->http://www.diveto.net/zero/ Mail->zero@diveto.net %date 2002/12/01 %author Sinagawa(original by onitama) %dll hspdx %url http://www.onionsoft.net/ %index es_bye システム解放 %group 拡張画面制御命令 %inst HSPDX.DLLシステムの切り離しをします。 画面モードをウィンドウモードに戻し、確保されていたメモリをすべて解放し ます。 これは、クリーンアップ関数としてHSP終了時に自動的に呼び出されま す。 %index es_caps DirectXシステム情報取得 %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : 情報が代入される変数名 (数値型) p2 : 情報ID p3 : 情報ビット (1〜32) p4 : 対象となるレイヤー ( 0=HAL / 1=HEL ) %inst DirectX のドライバが、どのような機能を持っているかを調べて、結果をp1で 指定する変数に代入します。 ^ p2の情報IDと、p3の情報ビットについての詳細は、 「 HSPDX.DLL REFERENCE MANUAL 」 のDDCAPS一覧を参照してください。 %index es_palfade パレットフェード %group 拡張画面制御命令 %prm p1,p2 p1 : フェード値 (-256〜256) p2 : フェードするスピード (0〜128) %inst p1で画像の明るさを設定します。p1が0の時が通常 ( 設定パレットのまま )で す。 p1がマイナス値になるほど画像は暗くなり、 プラス値になるほど明るく なります。 p1が-256で完全な黒になり、256 で完全な白になります。 ^ p2でフェードのスピードを指定することができます。 p2を省略するか、 0の 場合はes_palfade命令が実行されるとすぐにp1の指定が反映されます。 1〜128の場合は、現在設定されている値からp1で指定した値までなめらかに変 化します。指定した数値が大きいほど変化のスピードは速くなります。 %href es_palset %index es_palset パレット変更 %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : パレット番号(0〜255) p2 : 設定するR値 (0〜255) p3 : 設定するG値 (0〜255) p4 : 設定するB値 (0〜255) %inst パレットの色を設定します。p1で指定したパレット番号に、p2,p3,p4がそれぞ れR,G,Bとなる色を設定します。 ^ es_palset命令による設定変更は、命令実行時すぐには反映されません。 実際に設定が反映されるのは、 次にes_sync命令かes_palfade命令が実行され る時になります。 %href es_sync es_palfade %index es_boxf 矩形塗りつぶし %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : 塗りつぶし左上X座標 p2 : 塗りつぶし左上Y座標 p3 : 塗りつぶし右下X座標 p4 : 塗りつぶし右下Y座標 %inst (p1,p2)-(p3,p4)の矩形範囲を現在選択されている色で塗りつぶします。 色の 選択は、color命令で行ないます。 %href color es_fill %index es_fill 矩形塗りつぶし %group 拡張画面制御命令 %prm p1,p2,p3 p1 : 塗りつぶし左上X座標 p2 : 塗りつぶし左上Y座標 p3 : 塗りつぶす色のパレット番号(0〜255) %inst es_boxf命令と同じく指定した矩形範囲を塗りつぶすための命令です。 異なる点は、 es_fill命令では、塗りつぶす色をパレット番号で指定します。 ^ 塗りつぶす大きさ(サイズ)は、gmode命令で指定したサイズになります。 (p1,p2) から gmode命令で指定した矩形範囲を指定したパレットで塗りつぶし ます。 es_boxf命令よりも速度の面で有利です。 %href es_boxf gmode %index es_cls 画面クリア %group 拡張画面制御命令 %prm p1,p2,p3 p1 : 画面クリア時のR値 p2 : 画面クリア時のG値 p3 : 画面クリア時のB値 %inst この命令は、画面全体を指定した色でクリアします。 p1,p2,p3でクリアする色をRGBコードで指定可能です。 ^ 実際には、指定したRGBに最も近い色を持つパレットでクリアされます。 p1,p2,p3の指定を省略すると、黒でクリアします。 %index es_fmes フォント指定文字列表示 %group 拡張画面制御命令 %prm "str" "str" : 表示文字列 %inst カレントポジション (pos命令で指定されたX,Y座標) から、指定した文字列を 表示します。文字の色は、現在選択されている色 (color命令で指定)になり、 フォントは font命令で選択されているものが使用されます。 %href font es_mes %index es_mes 文字列表示 %group 拡張画面制御命令 %prm "str" "str" : 表示文字列 %inst カレントポジション (pos命令で指定されたX,Y座標) から、指定した文字列を 表示します。 es_fmes命令と似ていますが、 文字の色やフォントが選べないかわりに、こち らの方が高速に処理されます。 文字の色は、常に白 (RGB=255) となり、標準フォントが使用されます。 %href es_fmes %index es_put キャラクタ画面表示 %group 拡張画面制御命令 %prm p1,p2,p3 p1 : putする左上X座標 p2 : putする左上Y座標 p3 : putするキャラクタNo. %inst スプライト用のキャラクタパターンとして登録されているデータを、指定した 座標に表示します。この命令は、スプライトとは関係なく画面にキャラクタを 転送する命令です。 %href %index es_draw スプライト描画 %group 拡張画面制御命令 %prm p1,p2 p1 : 描画開始スプライトNo. p2 : 描画するスプライトの個数 %inst 登録されているスプライトを画面に描画します。 通常は p1,p2のパラメータを省略して使用すれば、すべてのスプライトを描画 することが可能です。 ^ 登録されているスプライトの一部だけを描画したい場合は、p1に開始スプライ トNo.、p2に描画する個数を指定してください。 %sample *gmain stick ky,$1f ; キーの情報を取得 if ky&$80 : goto *owari ; [ESC]中断チェック es_cls ; 画面クリア es_draw ; スプライト描画 es_sync ; 画面の更新 await 0 ; Systemアイドル goto *gmain %index es_window スプライト表示エリア設定 %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : スプライト表示基点X座標 p2 : スプライト表示基点Y座標 p3 : スプライトを表示するX方向の範囲 p4 : スプライトを表示するY方向の範囲 %inst この命令により、スプライトを画面内の限られた範囲内にのみ表示することが 可能です。指定した範囲内がスプライトの表示エリアになります。 ^ スプライト以外の描画命令には、この範囲は適用されません。 %index es_area スプライト有効エリア設定 %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : 有効エリアの左上X座標 p2 : 有効エリアの左上Y座標 p3 : 有効エリアの右下X座標 p4 : 有効エリアの右下Y座標 %inst スプライトの有効エリアを設定します。 スプライト座標が (p1,p2)-(p3,p4) の範囲内にないものは、 自動的に削除さ れます。 ^ スプライトの表示範囲が設定されると (es_window命令)自動的に、スプライト 有効エリアも再設定されます。 %href es_window %index es_opt システムオプション設定 %group 拡張画面制御命令 %prm p1 p1 : システムオプション値1 %inst 拡張機能のオプション値を設定する命令です。 %index es_size キャラクタサイズ指定 %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : キャラクタのXサイズ p2 : キャラクタのYサイズ p3 : ヒットチェック領域(%) p4 : 不透明フラグ ( 0=透明 / 1=不透明 ) %inst スプライトのキャラクタパターンを定義する際の、サイズを指定します。 (p1,p2)がキャラクタのX,Yサイズになります。 ^ p3は当たり判定を行なう際のヒットチェック領域が、 何%になるかを指定しま す。 100を指定すると、(p1,p2)で指定したサイズいっぱいにヒットチェックを行な います。p4は、0ならば色が黒(RGB=0)の部分が透明になります。 1ならば不透 明のキャラクタパターンになります。 ^ キャラクタの X, Y サイズには特に制限はありませんが、オフスクリーンバッ ファから、はみ出すようなキャラクタパターンの指定は無効になります。 es_size命令の設定は、 以降のキャラクタ定義でずっと有効になります。 %href es_pat %index es_pat キャラクタ画像定義 %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : キャラクタNo. (0〜1023) p2 : キャラクタパターンの左上X座標 p3 : キャラクタパターンの左上Y座標 p4 : 表示フレーム数 (0) %inst スプライトのキャラクタパターンを定義します。 ^ p1はキャラクタNo.、(p2,p3) の座標から、es_sizeで設定した大きさのキャラ クタが登録されます。ここで対象となる画像は、直前に es_buffer命令でVRAM に転送された画像データとなります。この画像の中の一部を切り出してきてキ ャラクタパターンとして登録しておきます。 ^ es_pat命令1回で、指定したキャラクタNo.にキャラクタパターンが登録されま す。たくさんのキャラクタパターンが必要な場合は、そのぶん登録をしておく 必要があります。 ^ p4のパラメータは、キャラクタアニメーションをするための設定です。 0ならば、 アニメーションなし。 1以上ならば、指定したフレーム数だけその キャラクタを表示した後、 次のキャラクタ(キャラクタNo.+1)を表示するよう に設定されます。 %sample es_size 32,32 es_pat 1,0,0,8 es_pat 2,32,0,8 es_pat 3,64,0,8 es_pat 4,96,0 %href es_size es_buffer es_link %index es_link アニメーション設定 %group 拡張画面制御命令 %prm p1,p2 p1 : キャラクタNo. (0〜1023) p2 : ループアニメーションするキャラクタNo. (0〜1023) %inst キャラクタのループアニメーションを設定するための命令です。 p1で指定したキャラクタNo.が、指定されたフレームだけ表示した後に、 p2で 指定したキャラクタNo.に戻るように設定を行ないます。 %sample es_size 32,32 es_pat 1,0,0,8 es_pat 2,32,0,8 es_pat 3,64,0,8 es_pat 4,96,0,8 es_link 4,1 %href es_pat %index es_release スクリーンバッファ削除 %group 拡張画面制御命令 %prm p1 p1 : オフスクリーンバッファID (0〜9) %inst p1で指定されたオフスクリーンバッファを削除します。 %index es_set スプライト設定 %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : スプライトNo. (0〜511) p2 : スプライトX座標 p3 : スプライトY座標 p4 : キャラクタNo. (0〜1023) %inst スプライトを登録します。 p1は、スプライトNo.(0〜511)、(p2,p3)は画面上でのスプライトの座標になり ます。この座標を左上として、 p4で指定したキャラクタNo.が表示されます。 ^ スプライト座標は、-32767〜32767 までの範囲が設定可能です。 %href es_pat %index es_new 新規スプライト取得 %group 拡張画面制御命令 %prm p1,p2 p1 : 新規No.が代入される変数名 p2 : スプライトNo. (0〜511) %inst スプライトNo.の中で使われていないNo.を検索します。 p2で指定したNo.以降で空きのあるNo.を、p1で指定した変数に代入します。 %index es_get スプライト情報取得 %group 拡張画面制御命令 %prm p1,p2,p3 p1 : 情報が代入される変数名 p2 : スプライトNo. (0〜511) p3 : info number (0〜15) %inst p1で指定した変数名に、p2のスプライトNo.の情報を代入します。 情報の種類は、 p3の info number で指定します。 ^p info number : 1 = flag値 3 = スプライトのX座標 5 = スプラストのY座標 7 = 1フレームに移動する距離X 9 = 1フレームに移動する距離Y 10 = プログレスカウント値(未使用) 11 = アニメーションカウント値 12 = キャラクタNo. 13 = type値 14,15 = 特殊動作情報(未使用) ^p %index es_find スプライト検索 %group 拡張画面制御命令 %prm p1,p2,p3 p1 : スプライトNo.が代入される変数名 p2 : 検索対象となるtype値 p3 : 検索を開始するスプライトNo. (0〜511) %inst 登録されているスプライトの中で指定した type値を持つもののスプライトNo. を検索します。 ^ p2のtype値には、複数のtypeを同時に指定することができます。 たとえば、type1とtype4を対象にする場合は、1+4で5を指定します。 p2の指定を省略するか、 0を指定した場合にはすべてのtype値を持つスプライ トが検索の対象になります。 ^ 検索は、p3で指定されたスプライトNo.から順番に探していきます。 これを省略すると、No.0からすべてのスプライトを検索します。 該当するスプライトが見つかった時点で、p1に結果を代入して終わります。 検索の結果、該当するスプライトがなかった場合には、-1が代入されます。 %index es_check 衝突判定取得 %group 拡張画面制御命令 %prm p1,p2,p3 p1 : 結果が代入される変数名 p2 : チェックの対象となるスプライトNo. (0〜511) p3 : 検索対象となるtype値 %inst スプライト同士の衝突判定を行ないます。 p2で指定されたスプライトNo. と衝突している (重なっている) スプライトを 検索して、p1で指定した変数に結果を代入します。 ^ p3で衝突判定の対象となるtype値を指定することができます。 p3が省略されるか、0の場合は、すべてのスプライトとの衝突を判定します。 ^ p3のtype値には、複数のtypeを同時に指定することができます。 たとえば、type1とtype4を対象にする場合は、1+4で5を指定します。 衝突判定には、キャラクタパターンを登録した時に指定したヒットチェック領 域 (%)が使用されます。実際に画像が重なっていても、ヒットチェック領域の 範囲が重ならない限りは衝突とみなされません。 ^ 結果はp1で指定した変数に代入されます。もし、衝突しているスプライトがな かった場合には-1が、衝突しているスプライトがあれば、 そのスプライトNo. が代入されます。衝突しているスプライトが複数あった場合には、スプライト No.の少ないものが優先されます。 %href es_type es_size %index es_offset オフセット座標設定 %group 拡張画面制御命令 %prm p1,p2 p1 : オフセットX値 p2 : オフセットY値 %inst すべてのスプライトの表示を、オフセット値で指定した数だけずらして表示し ます。 この命令で設定したオフセット値は、es_draw命令で描画を行なった時 に反映されます。 %href es_draw %index es_flag flag値設定 %group 拡張画面制御命令 %prm p1,p2 p1 : スプライトNo. (0〜511) p2 : flag値 %inst p1で指定したスプライトのflag値を変更します。 flag値は、スプライトが有効になっている場合は、 $100(256)が自動的に設定 されています。通常は特にいじる必要はありません。 ^p flag値 = 0 : スプライト未登録 bit 0-6 : 1〜127 カウントダウンタイマー bit 7 : カウントダウン消失SWITCH bit 8 : $100 スプライト表示ON bit 9 : $200 スプライト移動ON bit10 : $400 自由落下移動ON bit11 : $800 BGとリンクして移動(未実装) bit12 : $1000 ボーダー消去無効ON bit13 : $2000 ボーダーXで反転SWITCH bit14 : $4000 ボーダーYで反転SWITCH bit15 : $8000 カウントダウンタイマー時点滅SWITCH ^p %index es_chr chr値設定 %group 拡張画面制御命令 %prm p1,p2 p1 : スプライトNo. (0〜511) p2 : キャラクタNo. (0〜1023) %inst p1で指定したスプライトのキャラクタNo.を変更します。 %index es_type type値設定 %group 拡張画面制御命令 %prm p1,p2 p1 : スプライトNo. (0〜511) p2 : type値 %inst p1で指定したスプライトのtype値を変更します。 type値についての詳細は、「HSPDX.DLL REFERENCE MANUAL」の「type値の設定に ついて」を参照してください。 %index es_kill スプライト削除 %group 拡張画面制御命令 %prm p1 p1 : スプライトNo. (0〜511) %inst p1で指定したスプライトNo.を削除します。 %href es_clear %index es_clear 複数スプライト削除 %group 拡張画面制御命令 %prm p1,p2 p1 : スプライトNo. (0〜511) p2 : 削除される個数 %inst p1で指定したスプライトNo. 以降のスプライトが削除され未登録になります。 p2で削除されるスプライトの数を指定することができます。 p1とp2の指定を省略した場合は、すべてのスプライトが削除されます。 %href es_kill %index es_pos スプライト座標設定 %group 拡張画面制御命令 %prm p1,p2,p3 p1 : スプライトNo. (0〜511) p2 : スプライトX座標 p3 : スプライトY座標 %inst スプライトの座標を変更します。 p1でスプライトNo.を指定して、(p2,p3) でX,Y座標を設定します。 ^ es_posは、設定済みのスプライトの座標だけを変更する命令です。 %index es_apos スプライト移動設定 %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : スプライトNo. (0〜511) p2 : 1フレームにX方向に移動するドット数 p3 : 1フレームにY方向に移動するドット数 p4 : 移動スピード(%) %inst スプライトを自動的に移動させるための設定をします。 p1でスプライトNo.、p2,p3でX,Y方向の増分を指定します。 ^ p4で移動スピードを%で指定します。p4を省略するか、100を指定した場合は、 100%のスピードとなり、1フレームに (p2,p3)で指定した増分だけ移動し続け ます。 もし、移動スピードを50(%)にして、増分が (+4,-2)に指定された場合 は、実際には、(+2,-1)の増分になります。 ^ 増分の単位は、1ドット以下になった場合でも正確に移動を行ないます。 たとえば、1フレームに、(1,0)の移動を10%で行なった場合でも、10フレーム 後に1ドット移動するように計算されます。 %href es_adir es_aim %index es_adir スプライト移動方向設定 %group 拡張画面制御命令 %prm p1,p2,p3 p1 : スプライトNo. (0〜511) p2 : 移動する方向 (0〜63) p3 : 移動スピード(%) %inst スプライトを自動的に移動させるための設定をします。 p1でスプライトNo.、p2で方向を指定します。方向は、0〜63までの数値で指定 します。0が真下となり、反時計回りに増加していきます。 ^ p3で移動スピードを%で指定します。p3を省略するか、100(%) を指定した場合 には、指定した方向に1フレームにつき1ドットの距離を移動します。 %href es_apos es_aim %index es_ini システムの初期化 %group 拡張画面制御命令 %prm p1,p2 p1 : スプライトの最大数 p2 : キャラクタ定義の最大数 %inst HSPDX.DLLシステムの初期化を行ないます。 パラメータを省略すると、スプライトは512個まで、 キャラクタ定義数は1024 個までを最大としてスプライトを初期化します。es_ini命令は何度でも実行す ることができるので、スプライトをすべてクリアしたい時などにも使用可能で す。 各パラメータはメモリの許す限りで自由に設定することができます。 %index es_sync 画面更新とウェイト %group 拡張画面制御命令 %prm p1 p1 : ウェイト時間(ms) p2 : V-BLANK待ちフラグ (0=待つ、1=待たない) %inst 描画された画面を更新するとともに、以前の es_sync命令実行時から経過した 時間を測定して、システム変数statに返します。 ^ p1で、最低でも何msのウェイトを取るかを指定することができます。 p1を省略するか、0を指定した場合は最低ウェイト時間はなくなります。 es_sync命令は、垂直帰線(V-BLANK)を待って画面を更新します。 つまり、最低でも以前es_sync命令が呼ばれてから、1フレーム分の時間はウェ イトが取られます。 ^ 1フレーム分の時間は、 モニタに出力されている映像周波数にもよりますが、 多くの場合1/60秒程度になっています。これは、多くのビデオゲームや家庭用 ゲーム機が画面更新しているサイクルと同じです。 通常は、 es_sync命令のみでウェイトの指定をしなくても、約1/60秒ごとのウ ェイトとなります。プログラムの処理が多かったり、画面の書き換えに要する 時間が多くなると、更新が1フレームごとに行なわれなくなる時が出てきて、 動きがガタガタとしたぎこちない、いわゆる「処理落ち」の状態になります。 このような時は、最低ウェイト時間を入れて、 画面の更新を2フレームごとに するなどして対処することができます。 ^ また、p1にマイナスの値を入れることで前回の実行で取りすぎたウェイトをで きるだけ取り戻すようにすることもできます。 FPSが安定しない場合はこちら を使うことで改善されるかもしれません。 先述の通り、 es_sync命令はV-BLANKを待ってウェイトを取りますが、p2に1を 指定すると V-BLANKを待たずに画面を更新することができます。これによりリ フレッシュレート以上の速度でウェイトを取ることができますが、画面がブレ たりちらつきが発生しますので、普段は指定する必要はありません。 なお、ウィンドウモードでは基本的にV-BLANKは待ちませんので、 ウィンドウ モードで動かすときは必ずウェイトを設定して下さい。 ^ es_sync命令を実行した後には、システム変数 statに経過時間が代入されてい ます。これはプログラムの実行にかかっている時間を計測する最も簡単な手段 です。この数値がそのままベンチマークとなります。 %sample *gmain stick ky,$1f ; キーの情報を取得 if ky&$80 : goto *owari ; [ESC]中断チェック es_cls ; 画面クリア es_draw ; スプライト描画 es_sync ; 画面の更新 await 0 ; Systemアイドル goto *gmain %index es_zoom 拡大縮小画像コピー %group 拡張画面制御命令 %prm p1,p2,p3 p1 : オフスクリーンバッファID (0〜9) p2 : コピー元X座標 p3 : コピー元Y座標 %inst es_zoom命令では、 pos命令で指定した座標に、gmodeで指定したサイズとモー ドでp1で指定したIDの(p2,p3)の座標から画像がコピーされます。 ただし、コピー先のサイズはobjsize命令で指定したサイズが使われます。 これにより、コピー元とは違ったサイズでコピー先に転送してくることが可能 です。 ^ この機能は、ビデオカードのハードウェアが変倍コピーをサポートしている時 は高速に動作しますが、そうでない場合はソフトウェアで処理されるため劇的 に速度が低下するので注意してください。まだ、この機能をサポートしていな いビデオカードは少なくありません。 %href gmode objsize es_copy %index es_copy 画像コピー %group 拡張画面制御命令 %prm p1,p2,p3 p1 : オフスクリーンバッファID (0〜63) p2 : コピー元X座標 p3 : コピー元Y座標 %inst es_copy命令では、pos命令で指定した座標に、 gmodeで指定したサイズとモー ドでp1で指定したIDの(p2,p3)の座標から画像がコピーされます。 ^ HSPの gcopy命令とは若干違いがありますが、 ほぼ同じ記述でコピーが可能で す。gmode命令により、コピーするX,Yサイズと、コピーの際に透明色の処理を するかどうかを指定しておく必要があります。 ^ コピーモードが0の場合は、コピー元の画像が完全にコピーされます。 ^ コピーモードが1か2の場合は、コピー元の画像で透明色に指定された色はコピ ーされません。図形のまわりだけを切り抜いたようにコピーしてくる場合には 有効です。 %href gmode es_zoom %index es_xfer バッファ間画像コピー %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : 転送先DirectXバッファID (-2〜63) p2 : 転送元DirectXバッファID (-2〜63) p3 : コピー元X座標 p4 : コピー元Y座標 %inst es_copy命令と同じく画像イメージのコピーを行ないますが、 コピー先を画面 上だけではなく、別なバッファなども指定することができます。 ^ p1で指定したバッファIDにp2で指定したバッファIDのイメージを転送します。 転送先は、 pos命令で指定した座標に、 gmodeで指定したサイズとモードで、 (p3,p4)の座標から画像がコピーされます。 ^ es_copy命令の頭に転送先のバッファID が付加されたものと考えてください。 p1とp2のDirectXバッファ指定は、0〜63までのオフスクリーンバッファIDの他 にも、以下の値が使用できます。 ^p DirectXバッファID = -1 : 現在表示中の画面イメージ DirectXバッファID = -2 : 現在描画中の画面イメージ ^p es_copy命令では、転送先が-2にあたります。 ^ この命令を実行する際、コピー先のバッファはあらかじめ es_buffer命令によ って確保されている必要があります。 (この命令でバッファを新規に作成することはできません) %href es_copy gmode %index es_buffer VRAMイメージ転送 %group 拡張画面制御命令 %prm p1,p2 p1 : オフスクリーンバッファID (0〜63) p2 : 属性スイッチ (0〜2) p3 : 透明色 (パレットモード時:-1〜255、ハイカラー以上:0〜$ffffff) %inst ^p 属性スイッチ=0 : オフスクリーンバッファをVRAMに取る、 失敗した場合は、メインメモリに取る 属性スイッチ=1 : オフスクリーンバッファをメインメモリに取る 属性スイッチ=2 : オフスクリーンバッファをVRAMに取る ^p 現在gsel命令で選択されているHSPのバッファ内容を、DirectXのオフスクリー ンバッファにすべて転送します。 この時、パレットも読み出されDirectX側のパレットに転送されます。 ^ オフスクリーンバッファに転送できる最大画像サイズは、ビデオカードによっ て異なり、主に ^p 1. 縦横ともに画面解像度以上のサイズで作成できる 2 .横は画面解像度と同サイズまで、縦はそれ以上のサイズで作成できる 3. 縦横ともに画面解像度と同サイズまで ^p の3通りとなっています。現存するビデオカードは 2.に該当するものが多く、 3.に該当するものはほとんどないと思われます。よって、あらゆる環境で確実 に動くことを期待するなら画面解像度まで、大きなバッファを扱いたいなら縦 に長くバッファを確保することをおすすめします。 ^ p3にはes_copy命令などで透明色として使う色を指定します。 パレットモードでは0〜255までのパレット番号を直接指定するか、-1を指定す ることで完全な黒 (RGB=0)でパレット番号が一番若いパレットを自動的に透明 色に設定します。 ハイカラー以上では透明色に指定する RGB値を $rrggbb の16進数6桁で設定し ます。 たとえば、$00ff00と指定することでRGB=(0,255,0)の色が透明色になります。 ^ HSP側のバッファは、DirectXがパレットモードの時は同じくパレットモードで 初期化されていないと正常に転送されませんが、ハイカラー以上の場合はパレ ット・フルカラーモードどちらでも転送されます。 オフスクリーンバッファへの転送が成功した場合には、システム変数statの値 は0になります。転送に失敗すると、statの値は1になります。 転送に失敗する可能性は、転送する画像が大きすぎるか、VRAMの容量が足りな いことなどが考えられます。自分の環境では動作していても、別のマシンでは エラーになる可能性がありますので、スクリプト側でチェックをするように心 がけてください。 ^ すでに転送済みのオフスクリーンバッファIDを指定した場合には、一度その内 容が削除され、新しいものに上書きされます。 %sample buffer 3,640,480,1 picload "test.bmp" es_buffer 0 %index es_getbuf VRAMイメージ読み出し %group 拡張画面制御命令 %prm p1 p1 : DirectXバッファID (-2〜63) %inst DirectXが管理する画像バッファの内容を、HSPのウィンドウに読み出しコピー します。読み出しは、現在 gsel命令で選択されているHSPのウィンドウIDに対 して行なわれます。 p1で、DirectXのバッファIDを指定します。これは、es_buffer命令などで使用 するオフスクリーンバッファIDの他に以下の値が使用できます。 ^p DirectXバッファID = -1 : 現在表示中の画面イメージ DirectXバッファID = -2 : 現在描画中の画面イメージ ^p es_getbuf命令は、 主にバッファの内容確認のためや実行中の画面をキャプチ ャして保存したい場合など、テスト的な用途に使用できます。 DirectXの使用中は、通常のHSPウィンドウ上に対しての描画処理を行なうこと ができないので、用途は限られてしまいます。 たとえば、現在表示中の画面イメージを bmpファイルにセーブする場合などは 、以下のようなスクリプトになります。 ^p es_getbuf -1 bmpsave "capture.bmp" ^p HSPウィンドウ側のバッファのモードやサイズに制限はありませんが、 転送元 よりバッファのサイズが小さい場合は右下が切れて転送されます。 %href es_buffer %index es_aim スプライト参照座標設定 %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : スプライトNo. (0〜511) p2 : 移動先のX座標 p3 : 移動先のY座標 p4 : 移動スピード(%) %inst es_aim命令は、 es_adir命令と同じく指定した方向にスプライトを移動させる ためのものです。 es_aim命令では、方向の替わりに移動する目標となるX,Y座 標を指定します。スプライトは、現在の座標から、目標となる座標への方向を 計算し移動を開始します。 ^ この命令は、たとえば敵から発射されるミサイルがプレイヤーを狙って移動す るようにしたい時などに役立ちます。 ^ p4で移動スピードを%で指定します。 p4を省略するか、100(%)を指定した場合 には、指定した方向に1フレームにつき1ドットの距離を移動します。 ^ この命令を実行するとシステム変数 statに移動方向が返ります。 これを利用して自機を狙う3方向弾などを作成することができます。 %href es_apos es_adir %index es_ang 角度取得 %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : 基準点のX座標 p2 : 基準点のY座標 p3 : 目的点のX座標 p4 : 目的点のY座標 %inst システム変数statに(p1,p2)から見た(p3,p4)の方向が返ります。 es_aimを使っても方向を得ることはできますが、この命令を使えばスプライト を使わずに方向を得ることができます。 %index es_timer タイマー取得 %group 拡張画面制御命令 %prm p1 p1 : 結果が代入される変数名 %inst Windowsを起動してからの経過時間をミリ秒単位で、 p1に指定した変数に代入 します。精度は環境に依存します。 %index es_getfps FPS取得 %group 拡張画面制御命令 %prm p1 p1 : 結果が代入される変数名 %inst 1秒間に es_sync命令が実行された回数を、p1で指定した変数に代入します。 %index es_screen 画面モードの変更 %group 拡張画面制御命令 %prm p1,p2,p3,p4 p1 : DirectX使用時の解像度X p2 : DirectX使用時の解像度Y p3 : DirectX使用時のカラーモード(bpp) p4 ; パレット変換モード(0=236色/1=254色/2=256色/3=236色ウィンドウモード) %inst 画面の解像度を変更し、DirectXが使用可能な状態にします。 ^ (p1,p2)で解像度を指定します。通常は、(640,480)を指定します。 p3はカラーモードを指定します。 パレットモードを使用する場合は8、ハイカ ラー以上を使用する場合は16,24,32のいずれかを指定します。 ただし、 ビデオカードによっては24または32bitの画面モードをサポートして いないものもありますので注意してください。 ^ p4のパレット変換モードは、画面で使用するパレットの数を設定します。 通常は0を指定して下さい。パレットの数を254または、 256にしたい場合に値 を変更します。 ただし、236よりも多いパレット数を指定すると、フルスクリ ーンモード以外では動作しなくなります。 また、254よりも多いパレットを指 定できないビデオカードが存在するので、なるべくパレット変換モードは、 0 または1で使用してください。 ^ また、パレット変換モード0の時に使用するパレットは0〜235までです。HSPの 通常ウィンドウとは異なりますので注意してください。 ^ p4=3の時は、DirectXをウィンドウモードで動かします。 このモードを使用することにより、デバッグをよりスムーズに行うことができ ますが、フルスクリーンモードでの動作に比べていろいろと制約があり、 環境によっては パフォーマンス面でHSPの標準ウィンドウでの動作とほとんど 変わらないことがあるため、デバッグ専用のモードだと割り切って使用した方 がよいです。 ^ ウィンドウモードで動作するときの制約は、以下の通りです。 パレットモードで動かす場合、使用できる色数は236色までです。 ウィンドウモード時は、内部ではデスクトップの色数に合わせて動作しますの で、デスクトップが256色でない場合はパレット関係の命令は無視されます。 また、RGB値が同一のパレットが2色以上ある場合、それらは全て同じ色として 扱われるため、透明色と同じ色は全て透過されてしまいます。 ^ ハイカラー以上で動かす場合、 デスクトップの色数とDirectXのカラーモード が異なるとエラーになります。