オープニングデモのサンプルスクリプト

どんなゲームでもジャンルを限定せず、オープニングの構造と言うのは大体決まっていたりする。

  1. 最初にオープニングムービーやロゴ
  2. ゲームの選択画面:ゲーム開始とかコンフィグとかを選ぶ画面
  3. 2の選択画面に長時間操作しないでいると、ムービー開始。
  4. ムービー中にクリックとかすると、2に戻る。

この、2〜4を実現するサンプルスクリプトを作ってみた。

00.txt

*define

mov %0,100
numalias bexec,%0:inc %0 ; bexecで使う専用変数を定義

mov %1,100
numalias sp_button,%1:dec %1 ; ボタンのスプライト番号を定義

deletemenu

game

*start

*opening

	; オープニングの初期設定
	*opening_init

	; ボタン(にする予定)の表示
	lsp sp_button,":s/24,24,0;#FFFFFF#00FF00#FF0000ゲームを始める。",100,100
	
	; BGMを流す。
	dwave 0,"bgm.ogg" ; bgmではなくて、dwaveのチャンネル0でやるのが味噌

	; オープニングのループ
	*opening_loop

	print 10,2000 ; ボタンを表示。2秒かけて。
	
	;ボタン処理
	bclear ; 初期化
	bsp sp_button ; 100番のスプライトをボタン化
	btime 1,1 ; ",1"が味噌。これでbexecがdwave 0が終了するまで待つことになる。
	
	bexec $bexec,%bexec ; 入力待ち
	
	if $bexec="TIMEOUT" gosub *opening_demo ; タイムアウト、つまりオープニングをBGMが一周するまで何もしなかった場合。
	if %bexec=sp_button gosub *opening_end:goto *game_start ; オープニング画面を消して、ゲームを始める。

goto *opening_loop ; ループさせる。

*opening_end

	csp sp_button ; 使ったスプライトを消す。
	dwavestop 0 ; 音を消す。

return

; オープニングムービーのルーチン
*opening_demo

	movie "op.mpg",pos,0,0,640,480,click

return *opening_init

*game_start

	print 10,2000 ; 画面を整える。

ゲームが始まったよー。\

end

実際に動かす時は、bgm.oggとかop.mpgとかを自前で用意すること。
で、少々動きに嘘があって、関係ないところをチカチカクリックしていても、BGMが一周すると必ずムービーに突入する点かな。
このスクリプトの利点は、BGMの長さがどれくらいか意識する必要がないと言う点。
もし、事前にBGMの長さがわかっているか、BGMの長さを無視してムービーに突入したい場合は、次のスクリプトになる。

*define

mov %0,100
numalias bexec,%0:inc %0 ; bexecで使う専用変数を定義

mov %1,100
numalias sp_button,%1:dec %1 ; ボタンのスプライト番号を定義

deletemenu

game

*start

*opening

	; オープニングの初期設定
	*opening_init

	; ボタン(にする予定)の表示
	lsp sp_button,":s/24,24,0;#FFFFFF#00FF00#FF0000ゲームを始める。",100,100
	
	; BGMを流す。
	bgm "bgm.ogg"

	; オープニングのループ
	*opening_loop

	print 10,2000 ; ボタンを表示。2秒かけて。
	
	;ボタン処理
	bclear ; 初期化
	bsp sp_button ; 100番のスプライトをボタン化
	btime 180000,0 ; bgmの長さが180秒、もしくはそれとは関係なく操作無し状態から180秒でムービーに突入。
	
	bexec $bexec,%bexec ; 入力待ち
	
	if $bexec="TIMEOUT" gosub *opening_demo ; タイムアウト、つまり操作無しで180秒経過した場合。
	if %bexec=sp_button gosub *opening_end:goto *game_start ; オープニング画面を消して、ゲームを始める。

goto *opening_loop ; ループさせる。

*opening_end

	csp sp_button ; 使ったスプライトを消す。
	bgmstop ; 音を消す。

return

; オープニングムービーのルーチン
*opening_demo

	bgmstop ; bgmを消す。
	movie "op.mpg",pos,0,0,640,480,click

return *opening_init

*game_start

	print 10,2000 ; 画面を整える。

ゲームが始まったよー。\

end

注意

こんなんメモだけどね。忘れてもその場で作れるくらいのシロモノだけど。