sample\ssaver\arusave.hsp » Plain Format
; ; HSPによるスクリーンセーバーサンプル ; 「あるがーまんスクリーンセーバー for HSP3」 ; onion software/onitama 1997-2005 ; ; ・作成のしかた ; ; 1. スクリプトエディタを起動して、arusave.hspをロードする。 ; 2. [CTRL]+[F9]キーでarusave.scrが作成されます。 ; 3. arusave.scrを選択して右クリックメニューの「インストール」で ; スクリーンセーバーを設定することができます。 ; パスワードによるスクリーンセーバーのロックには対応していません。 ; ;------------------------------------------------------------------------------- ; このスクリプトについて ; この「あるがーまんスクリーンセーバー」は、HSPを使ったスクリーンセーバー ; の最も単純なモデルです。このリストをもとに、新しいスクリーンセーバーを ; 作ってみてください。各パートの始まりと重要な部分にはコメントを入れて ; ありますので、参考にしてみてください。 ;------------------------------------------------------------------------------- ; ; スクリーンセーバースタートアップ ; スクリーンセーバー開始時は、以下のスイッチがコマンドライン ; に指定されているので、それによりプログラム処理を振り分ける。 ; /P プレビュー(小さな画面に表示されるモード) ; /S フルスクリーン(実際のスクリーンセーバー画面を実行) ; /C コンフィグ(設定画面を表示) ; ;------------------------------------------------------------------------------- ; 実行ファイルの作成パラメーター ; #pack "aruface.bmp" #packopt name "arusave" #packopt type 2 #packopt xsize 320 ; 設定画面の横サイズ #packopt ysize 200 ; 設定画面の縦サイズ ;------------------------------------------------------------------------------- ; s=dir_cmdline:a=peek(s,1) ; コマンドラインの2文字目を取り出す if (a>='A')&(a<='Z') : a+=32 ; 大文字を小文字に変換する if a='p' : goto *sspre ; プレビュー if a='s' : goto *ssproc ; フルスクリーン if a='c' : goto *sscfg ; コンフィグ if a=0 : goto *sscfg ; コンフィグ ; ; コマンドラインがどれでもない時はエラーを表示。 ; HSPスクリプトエディタでためしに実行してみる場合には、 ; HSPメニュー「起動オプション」を選んで、「/s」や「/p」などの ; スイッチを指定してコンパイル+実行をしてください。 ; dialog "Unknown switch ["+s+"]" end *sscfg ; コンフィグ(設定画面) ; このスクリプトでは単にタイトルを表示しています。 ; 実際は、スクリーンセーバーの状態やモードなどを設定します。 ; その場合は、設定を保存しておくファイルを作ってbload,bsave命令 ; などで管理しておくといいでしょう。 ; tt="あるがーまんスクリーンセーバー" title tt gosub *faceload gsel 0 width 320,200 cls:pos 4,8 mes tt mes "(HSP3 screen saver sample version)" mes "copyright 1997-2005 / onitama" pos 4,80:gcopy 3,0,0,sx,sy pos 220,140:button "OK",*ssend stop *ssend end *sspre ; プレビュー画面 ; ここでは、スクリーンセーバーを選択した時に見える、小さな ; 画面内でのプレビューの処理をしています。 ; プレビューモードでは、HSPのメイン画面(ウインドゥID0)が、 ; プレビュー画面に合わせて小さくなっていますので、まず ; ginfo_winx,ginfo_winyのシステム変数で画面のサイズを取得してから ; その中に描画するようにしてください。 ; ここでは、単に画像を表示しているだけですが、フルスクリーン ; のスクリーンセーバーがどんな大きさの画面にも対応していれば、 ; ginfo_winx,ginfo_winyの値をもとに実際のスクリーンセーバー処理を ; 行なうのがいいでしょう。 ; cls 4 gosub *faceload gsel 0 x=(ginfo_winx-sx)/2:y=(ginfo_winy-sy)/2 pos x,y:gcopy 3,0,0,sx,sy stop *ssproc ; フルスクリーン ; ここは、実際に実行されるスクリーンセーバー本体の処理です。 ; まず、ginfo_dispx,ginfo_dispyの情報をもとに全画面の大きさの ; ウインドゥを作成します。このための命令は、 ; bgscr 2,ax,ay,0,0,0,ax,ay ; です。これで、ウインドゥID2に全画面の256色パレットモードの ; ウインドゥが作成され、その中を描画できるようになります。 ; ここで描画された内容が、そのままスクリーンセーバーの実行画面 ; となります。スクリーンセーバーからの復帰チェックは行なう必要 ; はありません。スクリーンセーバーの実行中にマウスを動かすと、 ; 自動的に中断され復帰するようになっています。 ; スクリプトエディタから実行された時は、マウスを動かしても復帰 ; しませんので、[ALT]+[F4]を押して実行を終了させてください。 ; randomize ; 起動のたびに違う乱数を作る gosub *faceload ; ID3に画像をロード ax=ginfo_dispx:ay=ginfo_dispy ; ax,ayにスクリーンセーバーが動作する ; 画面サイズを入れておく。スクリプト ; エディタから実行する時は、コメントに ; なっている下の2行を使うと便利。 bgscr 2,ax,ay,0,0,0,ax,ay ; ID2にフルスクリーン画面を作成 cls 4 ; 黒で画面クリア gmode 0,sx,sy ; コピーのモードとサイズを設定 *ssini ; 各種変数の初期化 ; px=0:pp=1:a=sx/2:pz=rnd(a):pz=(pz+a)*2 x=sx+pz:y=sy+pz mx=ax-x:my=ay-y xx=rnd(mx):yy=rnd(my) xx=x/2+xx:yy=y/2+yy *sslp ; あるがーまん表示メインループ ; x=sx+px:y=sy+px:mx=x/2:my=y/2 pos xx-mx,yy-my:gzoom x,y,3 px+=pp if px=0 : goto *ssnext if px=pz : pp=-1 await 10 goto *sslp *ssnext ; 1回の表示が終了。再び表示へ戻る ; zx=xx-mx:zy=yy-my color 0,0,0:boxf zx,zy,zx+x,zy+y goto *ssini *faceload ; サプルーチン : あるがーまんの画像を読み込む ; ID3の画面に、あるがーまん画像を読み込みます。 ; 読み込んだ画像のサイズを、sx,syという変数に入れて ; 終了します。sx,syはその後、別画面に転送する時に使用 ; されます。読み込むファイルを、「aruface.bmp」から ; 別のファイルに変えることもできます。その場合は、 ; 必ず256色の画像ファイルにしてください。また、サイズ ; は自由ですがあまり大きすぎると色々な場所に表示できなく ; なってしまいます。(あるがーまんは80x80ドットの画像です) ; buffer 3,120,120 picload "aruface.bmp" sx=ginfo_winx:sy=ginfo_winy wx=sx*2:wy=sy*2 return