gametitle.c 4.76 KB
/*============================================================================
  NuSYSTEM サンプルプログラム「SNAKE TAIL HACK」
  
  gametitle.c
  
  Copyright (C) 1997, NINTENDO Co,Ltd.
  ============================================================================*/

#include <assert.h>
#include <nusys.h>
#include <nualsgi_n.h>

#include "main.h"
#include "graphic.h"
#include "font.h"
#include "para.h"

/*nusys*/
extern u32 nuScRetraceCounter;    /* リトレースカウンター */

/* gamemain.c */
extern void InitGame( void );

/* main.c */
extern void LoadContPak( void );
extern void ContPakOpenAll( void );
extern void NoteOpenAll( void );
extern int ChkPakStat( void );
extern int ReplayMode;
extern NUContData ContTriger[];
volatile extern int stage;
extern int ContPakError;
extern NUContPakFile pakFile[4];

/* view.c */
extern void SetViewMtx( Dynamic* dynamicp );

/* gamepakrwerr.c */
extern int ReadFlg;

void DrawTitle( void );
/*--------------------------------------------------------------*/
/*  ディスプレイリストを作り、グラフィックタスクを起動します	*/
/*  IN:	なし							*/
/*  RET:なし							*/
/*--------------------------------------------------------------*/
void
maketitleDL(void)
{
    Dynamic* dynamicp;

    /* ダイナミックバッファの指定 */
    dynamicp = &gfx_dynamic[gfx_gtask_no];

    /* ディスプレイリストバッファの指定 */
    glistp = &gfx_glist[gfx_gtask_no][0];

    /*  RSP,RDPの初期化 */
    gfxRCPInit();

    /*フレームバッファとZバッファのクリア*/
    gfxClearCfb();

    /* 視点マトリックスの設定 */
    SetViewMtx( dynamicp );

    DrawTitle();

    gDPFullSync(glistp++);
    gSPEndDisplayList(glistp++);

    assert((glistp - gfx_glist[gfx_gtask_no]) < GFX_GLIST_LEN);

    /* RSPタスクを起動し、表示バッファを切り替えます。*/
    nuGfxTaskStart(&gfx_glist[gfx_gtask_no][0],
		   (s32)(glistp - gfx_glist[gfx_gtask_no]) * sizeof (Gfx),
		   NU_GFX_UCODE_F3DEX , NU_SC_SWAPBUFFER);

    /* 次のグラフィックタスク番号の指定 */
    gfx_gtask_no++;
    gfx_gtask_no %= GFX_GTASK_NUM;
}

/*----------------------*/
/*  タイトル進行処理	*/
/*  IN:	なし		*/
/*  RET:なし		*/
/*----------------------*/
void
updateTitle(void)
{

#if 0
    int idx;
    if(ContTriger[0].trigger & L_TRIG){
	for(idx = 0; idx < 4; idx++){
	    nuContPakOpen(&pakFile[idx], idx);
	    switch(pakFile[idx].error){
	      case 0:
		osSyncPrintf("PACK%d\tOK\n",idx);
		break;
	      case PFS_ERR_NOPACK:
		osSyncPrintf("PACK%d\tPFS_ERR_NOPACK\n",idx);
		break;
	      case PFS_ERR_NEW_PACK:
		osSyncPrintf("PACK%d\tPFS_ERR_NEW_PACK\n",idx);
		break;
	      case PFS_ERR_CONTRFAIL:
		osSyncPrintf("PACK%d\tPFS_ERR_CONTRFAIL\n",idx);
		break;
	      case PFS_ERR_ID_FATAL:
		osSyncPrintf("PACK%d\tPFS_ERR_ID_FATAL\n",idx);
		break;
	      case PFS_ERR_DEVICE:
		osSyncPrintf("PACK%d\tPFS_ERR_DEVICE\n",idx);
		break;
	      default:
		break;
	    }
	}
	osSyncPrintf("\n");
    }
#endif
    
    /* A BUTTON */
    if(ContTriger[0].trigger & A_BUTTON){
	ContPakOpenAll();
	if(ChkPakStat() == -1){
	    NoteOpenAll();
	    if(ChkPakStat() != -1){
		/* コールバック関数を取り除く。*/
		nuGfxFuncRemove();
		/* パックエラー画面へ */
		stage = 3;
	    }else{
		/* コールバック関数を取り除く。*/
		nuGfxFuncRemove();
		/* 次のステージをメインに指示 */
		stage = 1;
		/*ゲーム本編の為の初期化*/
		InitGame();
		ReplayMode = 0;
	    }
	}else{
	    /* コールバック関数を取り除く。*/
	    nuGfxFuncRemove();
	    /* 次のステージをメインに指示 */
	    stage = 3;
	}
	/* OKのエフェクトを鳴らす */
	nuAuSndPlayerPlay(EFF_OK);
	nuAuSndPlayerSetPitch(44100.0/32000);
    }

    if(ContTriger[0].trigger & B_BUTTON){
	ContPakOpenAll();
	if(ChkPakStat() != -1){
	    /* コールバック関数を取り除く。*/
	    nuGfxFuncRemove();
	    /* パックエラー画面へ */
	    stage = 3;
	}else{
	    NoteOpenAll();
	    /*ゲーム本編の為の初期化*/
	    InitGame();
	    ReplayMode = 1;
	    /* OKのエフェクトを鳴らす */
	    nuAuSndPlayerPlay(EFF_OK);
	    nuAuSndPlayerSetPitch(44100.0/32000);
	    /* コントローラーパックのデータをロードする */
	    LoadContPak();
	    if(ChkPakStat() == -1){
		/* コールバック関数を取り除く。*/
		nuGfxFuncRemove();
		/* 次のステージをメインに指示 */
		stage = 1;
	    }else{
		/* コールバック関数を取り除く。*/
		nuGfxFuncRemove();
		ReadFlg = 1;
		/* 次のステージをメインに指示 */
		stage = 4;
	    }
	}
	/* OKのエフェクトを鳴らす */
	nuAuSndPlayerPlay(EFF_OK);
	nuAuSndPlayerSetPitch(44100.0/32000);
    }
}

/*----------------------*/
/*  タイトル画面描画	*/
/*  IN:	なし		*/
/*  RET:なし		*/
/*----------------------*/
void
DrawTitle( void )
{
    sprintf(outstring,"SNAKE TAIL HACK");
    Draw8Font(100,70, TEX_COL_WHITE, 0);

    if(0x30 > (nuScRetraceCounter & 0x30)){
	sprintf(outstring,"PUSH A PADDATA SAVE MODE");
	Draw8Font(50,130, TEX_COL_WHITE, 0);
	
	sprintf(outstring,"PUSH B REPLAY MODE");
	Draw8Font(50,150, TEX_COL_WHITE, 0);
    }
}