; ; 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 = 特殊動作情報(未使用) %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 %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のカラーモードが 異なるとエラーになります。