gamepakrwerr.c 4.23 KB
/*============================================================================
  NuSYSTEM サンプルプログラム「SNAKE TAIL HACK」
  
  gamepakrwerr.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"

int ReadFlg;
void DrawRwErr( void );
extern void ContPakOpenAll( void );
extern void NoteOpenAll( void );
extern int ReplayMode;
extern void SetViewMtx( Dynamic* dynamicp );
extern NUContData ContTriger[];
extern u32 nuScRetraceCounter;    /* リトレースカウンター */
extern void InitGame( void );
volatile extern int stage;
extern int ContPakError;
extern NUContPakFile pakFile[];
extern int ContPakOpen[];
extern void SaveContPak( void );
extern int ChkPakStat( void );

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

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

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

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

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

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

    DrawRwErr();

    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
updateRwPakErr(void)
{
    /* A BUTTON */
    if(ContTriger[0].trigger & A_BUTTON){
	/* コールバック関数を取り除く。*/
	nuGfxFuncRemove();
	/* 次のステージをメインに指示 */
	stage = 0;
	/* OKのエフェクトを鳴らす */
	nuAuSndPlayerPlay(EFF_OK);
	nuAuSndPlayerSetPitch(44100.0/32000);
    }

    /* B BUTTON */
    if(ContTriger[0].trigger & B_BUTTON){
	ContPakOpenAll();
	if(ChkPakStat() != -1){
	    /* コールバック関数を取り除く。*/
	    nuGfxFuncRemove();
	    /* パックエラー画面へ */
	    stage = 4;
	}else{
	    NoteOpenAll();
	    /* コントローラーパックのデータをセーブする */
	    SaveContPak();
	    if(ChkPakStat() == -1){
		/* コールバック関数を取り除く。*/
		nuGfxFuncRemove();
		/* 次のステージをメインに指示 */
		stage = 0;
	    }else{
		/* コールバック関数を取り除く。*/
		nuGfxFuncRemove();
		ReadFlg = 1;
		/* 次のステージをメインに指示 */
		stage = 4;
	    }
	}

	/* OKのエフェクトを鳴らす */
	nuAuSndPlayerPlay(EFF_OK);
	nuAuSndPlayerSetPitch(44100.0/32000);
    }

    
}

/*------------------------------*/
/*  パックエラー画面描画	*/
/*  IN:	なし			*/
/*  RET:なし			*/
/*------------------------------*/
void
DrawRwErr( void )
{
    int idx;
    
    sprintf(outstring,"CONTROLLER PACK ERROR!!");
    Draw8Font(60,70, TEX_COL_RED, 0);

    for(idx = 0; idx < 4; idx++){
	switch(ContPakOpen[idx]){
	  case 0:
	    sprintf(outstring,"PACK%d:OK", idx+1);
	    break;
	  case PFS_ERR_NOPACK:
	    sprintf(outstring,"PACK%d:NOPACK", idx+1);
	    break;
	  case PFS_ERR_NEW_PACK:
	    sprintf(outstring,"PACK%d:NEW_PACK", idx+1);
	    break;
	  case RUMBLE_PAK:
	    sprintf(outstring,"PACK%d:RUMBLE PACK DETECTED", idx+1);
	    break;
	  default:
	    if(ReadFlg){
		sprintf(outstring,"PACK%d:LOAD FAIL", idx+1);
	    }else{
		sprintf(outstring,"PACK%d:SAVE FAIL", idx+1);
	    }
	    break;
	}
	Draw8Font(50,90+idx*10, TEX_COL_WHITE, 0);
    }

    sprintf(outstring,"PLEASE CHECK CONTROLLER PACK");
    Draw8Font(50,160, TEX_COL_WHITE, 0);

    sprintf(outstring,"PUSH A RETURN TITLE");
    Draw8Font(50,180, TEX_COL_WHITE, 0);

    if(ReadFlg){
	sprintf(outstring,"PUSH B LOAD RETRY");
    }else{
	sprintf(outstring,"PUSH B SAVE RETRY");
    }
    Draw8Font(50,200, TEX_COL_WHITE, 0);
}