このサンプルでは以下の処理を行っています。
- ゲームモード選択画面状態をステートで管理
- ゲームモード選択画面が開始されたらアニメーションを開始する
- ゲームモード選択中
- ゲームモード変更ごとにモードアニメーションを制御
※FREEの場合
- ゲームモードが選択されたら決定アニメーションを開始する
- 決定アニメーションが終了したらゲームモード処理を終了する
ゲームモード選択画面用スクリプト
GMST_START = 0;
GMST_SELECT = 1;
GMST_END = 2;
g_dwGMState = GMST_START;
g_dwGMSelect = 0;
g_iGMMenuCount = { 0,0,0,0,0 };
g_bGMPlayerLight = FALSE;
function OnStartGameMode( gmode )
trace( "OnStartGameMode : "..gmode );
g_dwGMSelect = gmode;
g_dwGMState = GMST_START;
g_iGMMenuCount[1] = 30;
g_iGMMenuCount[2] = 34;
g_iGMMenuCount[3] = 38;
g_iGMMenuCount[4] = 42;
g_iGMMenuCount[5] = 46;
g_bGMPlayerLight = FALSE;
hdxMatrixRotationX( 0,hdxToRadian(90) );
hdxLoadModel( 0,"title.x",0 );
hdxLoadAnime( 0,"frame.hda",0 );
hdxCtrlAnime( 0,CTRLMODE_AUTO_END,0,110,-1 );
hdxLoadAnime( 1,"gm_start.hda",0 );
hdxCtrlAnime( 1,CTRLMODE_AUTO_END,0,0,-1 );
hdxLoadAnime( 2,"star.hda",0 );
hdxCtrlAnime( 2,CTRLMODE_AUTO_LOOP,0,0,-1 );
hdxLoadAnime( 3,"lighting.hda",0 );
hdxCtrlAnime( 3,CTRLMODE_AUTO_LOOP,0,0,-1 );
hdxLoadAnime( 4,"gm_finish.hda",10 );
hdxCtrlAnime( 4,CTRLMODE_MANUAL,-1,0,-1 );
hdxLoadAnime( 5,"pl_light1.hda",0 );
hdxCtrlAnime( 5,CTRLMODE_MANUAL,-1,0,-1 );
hdxLoadAnime( 6,"pl_light2.hda",0 );
hdxCtrlAnime( 6,CTRLMODE_MANUAL,-1,0,-1 );
hdxLoadAnime( 10,"gm_mode01.hda",0 );
hdxCtrlAnime( 10,CTRLMODE_MANUAL,-1,0,-1 );
hdxLoadAnime( 11,"gm_mode02.hda",0 );
hdxCtrlAnime( 11,CTRLMODE_MANUAL,-1,0,-1 );
hdxLoadAnime( 12,"gm_mode03.hda",0 );
hdxCtrlAnime( 12,CTRLMODE_MANUAL,-1,0,-1 );
hdxLoadAnime( 13,"gm_mode04.hda",0 );
hdxCtrlAnime( 13,CTRLMODE_MANUAL,-1,0,-1 );
hdxLoadAnime( 14,"gm_mode05.hda",0 );
hdxCtrlAnime( 15,CTRLMODE_MANUAL,-1,0,-1 );
hdxLoadImage( 0,"gm_image.tga" );
hdxSetPutRange( 0,0,704,48,259,44,129,22 );
hdxSetPutRange( 1,0,440,96,259,44,129,22 );
hdxSetPutRange( 2,0,704,0,259,44,129,22 );
hdxSetPutRange( 3,0,440,48,259,44,129,22 );
hdxSetPutRange( 4,0,864,96,143,25,71,12 );
hdxSetPutRange( 5,0,704,96,154,25,77,12 );
hdxSetPutRange( 6,0,112,120,108,24,54,12 );
hdxSetPutRange( 7,0,0,120,112,28,56,14 );
hdxSetPutRange( 8,0,224,120,71,24,35,12 );
hdxSetPutRange( 9,0,0,0,697,48,348,24 );
hdxSetPutRange( 10,0,0,48,439,70,219,35 );
hdxLoadSound( 0,"gm_bgm.wav" );
hdxLoadSound( 1,"gm_cursor.wav" );
hdxPlaySound( 0,TRUE );
hdxCtrlAnime( g_dwGMSelect+10,CTRLMODE_AUTO_END,0,0,30 );
end
function OnRunGameMode( upd_frm )
local game_mode = hdxIsSupportedGameMode();
local game_mode2 = { game_mode["beginner"],game_mode["standard"],game_mode["expert"],game_mode["class"],game_mode["free"] };
if( g_dwGMState==GMST_START ) then
if( hdxIsEndAnime(1)==TRUE ) then
hdxEnableGameMode();
g_dwGMState = GMST_SELECT;
end
elseif( g_dwGMState==GMST_SELECT ) then
elseif( g_dwGMState==GMST_END ) then
if( hdxIsEndAnime(4)==TRUE ) then
hdxNextScene();
end
end
if( g_bGMPlayerLight==FALSE ) then
if( hdxGetAnimeFrame(0)>=80 ) then
local game_info = hdxGetGameInfo();
if( game_info["pmode"]==0 ) then
hdxCtrlAnime( 5,CTRLMODE_AUTO_LOOP,0,0,-1 );
elseif( game_info["pmode"]==1 ) then
hdxCtrlAnime( 6,CTRLMODE_AUTO_LOOP,0,0,-1 );
else
hdxCtrlAnime( 5,CTRLMODE_AUTO_LOOP,0,0,-1 );
hdxCtrlAnime( 6,CTRLMODE_AUTO_LOOP,0,0,-1 );
end
g_bGMPlayerLight = TRUE;
end
end
hdxSetZBuffer( TRUE );
hdxMatrixRotationY( 0, hdxToRadian( ((hdxGetTime()%(360*60))/60) ) );
hdxSetLookAt( 0,0,40, 0,0,0, 0,1,0 );
hdxSetViewport( 0,0,RENDER_WIDTH,RENDER_HEIGHT );
hdxDrawModel( 0,0 );
hdxSetZBuffer( FALSE );
hdxDrawAnime( 3, 0, 0, 1.0, 1.0 );
for i=0,4 do
g_iGMMenuCount[i+1] = g_iGMMenuCount[i+1] - 1;
if( g_iGMMenuCount[i+1] < 0 ) then
g_iGMMenuCount[i+1] = 0;
end
local x = (1 - math.cos( g_iGMMenuCount[i+1]*3*math.pi/180 )) * 480 + 1070;
local y = i * 62 + 238;
if( i==g_dwGMSelect ) then
if( game_mode2[i+1]==TRUE ) then
hdxPut( 3,x-16,y );
else
hdxPut( 1,x-16,y );
end
hdxPut( 4+i,x-16,y );
else
if( game_mode2[i+1]==TRUE ) then
hdxPut( 2,x,y );
else
hdxPut( 0,x,y );
end
hdxPut( 4+i,x,y );
end
end
hdxDrawAnime( 0, 0, 0, 1.0, 1.0 );
hdxDrawAnime( 2, 1150, 67, 1.0, 1.0 );
hdxDrawAnime( 5, 224, 651, 1.0, 1.0 );
hdxDrawAnime( 6,1056, 651, 1.0, 1.0 );
hdxDrawAnime( g_dwGMSelect+10, 0, 0, 1.0, 1.0 );
hdxDrawAnime( 1, 0, 0, 1.0, 1.0 );
hdxDrawAnime( 4, 0, 0, 1.0, 1.0 );
end
function OnChangeGameMode( gmode )
g_dwGMSelect = gmode;
hdxPlaySound( 1,FALSE );
hdxCtrlAnime( g_dwGMSelect+10,CTRLMODE_AUTO_END,0,0,30 );
end
function OnEndGameMode( gmode )
g_dwGMSelect = gmode;
hdxStopSound( 0 );
g_dwGMState = GMST_END;
hdxCtrlAnime( 4,CTRLMODE_AUTO_END,0,0,-1 );
end