int xfer(uint32_t *data_) {
    uint32_t data = *data_;
    int i;
    //WAIT_WITH_TIMEOUT(!(GBA_IN&(1<<MISO_BIT)), 25600, goto error);
    cli();

    RESET_TIMER();
    for (i=0;i<32;i++) {
        GBA_OUT &= ~((1<<CLK_BIT) | (1<<MOSI_BIT));

        GBA_OUT |= ((data>>31)&1)<<MOSI_BIT;
        WAIT_TIMER();
        GBA_OUT |= (1<<CLK_BIT);

        data<<=1;
        data |= (GBA_IN>>MISO_BIT)&1;
        WAIT_TIMER();
    }

    sei();
    *data_ = data;
    return 0;

    error:
    return -1;
}
Exemple #2
0
/*
	画像の表示
*/
void TeamLogo::Process()
{
	switch( mStatus){
	case FADEIN:
		mAlpha += 0.02f;
		if( mAlpha >= 1.0f ){
			mAlpha = 1.0f;
			mStatus = WAIT;
			//SE
			//GAMECONTROL->GetSoundController()->PlaySE("audio\\se\\se_team_rogo.wav");
		}
		break;

	case WAIT:
		WAIT_TIMER(mTimer, 3.0f)
			mStatus = FADEOUT;
		WAIT_END
		break;

	case FADEOUT:
		mAlpha -= 0.02f;
		if( mAlpha <= 0.0f ){
			mAlpha = 0.0f;
			if( GAMECONTROL->GetFader()->FadeOut() )
				STAGE_CLEAR;
		}
		break;

	}

	// 描画
	DX_DRAWALPHA("graphics\\screen\\team_logo.png", 120, 220, 0, 0, 560, 160, mAlpha);
}
Exemple #3
0
static void wd_proc(void)
{
	static byte am[6];
	byte i_met;
	word stat = 0;

	static /*PROGMEM */void * entries[] = {
		ADDR(t0),
		ADDR(t0_cmd),

		ADDR(t1), ADDR(t1_set), ADDR(t1_trkupd),
		ADDR(t1_trk0), ADDR(t1_step), ADDR(t1_waits),
		ADDR(t1_vrfy), ADDR(t1_waitd), ADDR(t1_hlt),
		ADDR(t1_rdam),

		ADDR(t2), ADDR(t2_waitd), ADDR(t2_hlt),
		ADDR(t2_loop), ADDR(t2_amc), ADDR(t2_rd),
		ADDR(t2_rdblk), ADDR(t2_mchk), ADDR(t2_wr),

		ADDR(t3), ADDR(t3_wait), ADDR(t3_hlt), ADDR(t3_rdam),

		ADDR(t4),

		ADDR(reset),

		ADDR(done)
	};

	goto *entries[wd.state];
	/***************/ ENTRY(t0); /***************/
	WAIT();
	/***************/ ENTRY(t0_cmd); /***************/
	WD_TRACE(("wd: t0_cmd: %s, cr=0x%02x\n", wd_command_decode(wd.cr), wd.cr));

	if ((wd.cr & TYPEIV_MASK) == TYPEIV) {
        BDI_ResetWrite();
        BDI_ResetRead( 0 );

        if ((wd.cr & INTR_MASK) != 0)
        {
            wd.ready = fdc_query(FDC_READY);
            SET_TIMERU( 64 );
            JUMP(t4);
        }

		if (!WD_BUSY())
		{
			wd.cr_c = 0;
		}
		WD_TRACE(("wd: clr busy signal (#1)\n"));
		WD_CLR_BUSY();
		JUMP(t0);
	} else if ((wd.cr & TYPEI_MASK) == TYPEI) {
		wd.cr_c = wd.cr;
  		wd.str &= ~(WD17XX_STAT_CRCERR|WD17XX_STAT_SEEKERR);
  		fdc_set(FDC_HLD, (wd.cr_c & TYPEI_BIT_H) != 0);
   		JUMP(t1);
	} else {
		wd.cr_c = wd.cr;
		wd.str &= ~(WD17XX_STAT_RECTYPE|WD17XX_STAT_WRERR|WD17XX_STAT_CRCERR|WD17XX_STAT_LOST|WD17XX_STAT_WP|WD17XX_STAT_NOTFOUND);

		if (!fdc_query(FDC_READY)) {
			JUMP(done);
		}

		fdc_set(FDC_HLD, 1);

		if ((wd.cr_c & TYPEII_MASK) == TYPEII) {
			JUMP(t2);
		} else {
			if ((wd.cr_c & TYPEIII_AM_MASK) != TYPEIII_AM) {
				wd.str |= WD17XX_STAT_WP;
				JUMP(done);
			}
			JUMP(t3);
		}
	}
	WAIT();
	//=========================================================
	// type 1
	//=========================================================
	/***************/ ENTRY(t1); /***************/
	WD_TRACE(("wd: t1: dr=%x, hld=%u\n", wd.dr, fdc_query(FDC_HLD)));

	if ((wd.cr_c & TYPEI_STEP_MASK) != 0) {
		if ((wd.cr_c & TYPEI_STEPWD_MASK) == TYPEI_STEPWD) {
			fdc_set(FDC_SDIR, (wd.cr_c & TYPEI_SDIR_MASK) == 0);
		}
		if ((wd.cr_c & TYPEI_BIT_U)) {
			JUMP(t1_trkupd);
		} else {
			JUMP(t1_step);
		}
	} else {
		if ((wd.cr_c & TYPEI_SEEK_MASK) != TYPEI_SEEK) {
			// restore
			wd.tr = 0xff;
			wd.dr = 0;
		}
	}
	/***************/ ENTRY(t1_set); /***************/
	WD_TRACE(("wd: t1_set, time=%s\n", ticks_str(get_ticks())));

	wd.dsr = wd.dr;
	if (wd.dsr == wd.tr) {
		JUMP(t1_vrfy);
	}
	fdc_set(FDC_SDIR, wd.dsr > wd.tr);
	/***************/ ENTRY(t1_trkupd); /***************/
	WD_TRACE(("wd: t1_trkupd, sdir=%u, tr=%u, time=%s\n", fdc_query(FDC_SDIR), wd.tr, ticks_str(get_ticks())));

	if (fdc_query(FDC_SDIR)) {
		wd.tr += 1;
	} else {
		wd.tr -= 1;
	}
	/***************/ ENTRY(t1_trk0); /***************/
	WD_TRACE(("wd: t1_trk0, sdir=%u, time=%s\n", fdc_query(FDC_SDIR), ticks_str(get_ticks())));

	if (!fdc_query(FDC_TRK0) && !fdc_query(FDC_SDIR)) {
		WD_TRACE(("wd: t1_trk0: trk0\n"));
		wd.tr = 0;
		JUMP(t1_vrfy);
	} else {
		fdc_set(FDC_STEP, 1);
		SET_TIMERU(WD_STEP_INTERVAL);
	}
	/***************/ ENTRY(t1_step); /***************/
	WDH_TRACE(("wd: t1_step time=%s\n", ticks_str(get_ticks())));
	WAIT_TIMER();

	fdc_set(FDC_STEP, 0);

	SET_TIMER(wd_step_rate(wd.cr_c & TYPEI_BIT_R));
	/***************/ ENTRY(t1_waits); /***************/
	WDH_TRACE(("wd: t1_waits time=%s\n", ticks_str(get_ticks())));

    // delay according to r1,r0 field
    WAIT_TIMER();

	if ((wd.cr_c & 0xe0) == 0) {
		JUMP(t1_set);
	}
	/***************/ ENTRY(t1_vrfy); /***************/
	WD_TRACE(("wd: t1_vrfy time=%s\n", ticks_str(get_ticks())));

    // is V = 1?
	if ((wd.cr_c & TYPEI_BIT_V) == 0) {
		JUMP(done);
	}
	// set hld
	fdc_set(FDC_HLD, 1);
	// setup delay
	SET_TIMER(DATA_DELAY);
	/***************/ ENTRY(t1_waitd); /***************/
	WDH_TRACE(("wd: t1_waitd time=%s\n", ticks_str(get_ticks())));

	// has 15 ms expired
    WAIT_TIMER();
	/***************/ ENTRY(t1_hlt); /***************/
	WD_TRACE(("wd: t1_hlt time=%s\n", ticks_str(get_ticks())));

	// is hlt = 1
    if (!wd_is_hld()) {
		WAIT();
    }
	wd.icnt = 0;
	/***************/ ENTRY(t1_rdam); /***************/
	WD_TRACE(("wd: t1_rdam, icnt=%u, time=%s\n", wd.icnt, ticks_str(get_ticks())));

	if (wd.icnt >= 6) {
		wd.str |= WD17XX_STAT_SEEKERR;
		JUMP(done);
	}
	stat = floppy_stat();
	if ((stat & FLP_STAT_AM) == 0) {
		WAIT();
	}
	if (wd_rd_am(am)) {
		if (wd.tr == am[0]) {
			JUMP(done);
		}
	}
	WAIT();
	//=========================================================
	// type 2
	//=========================================================
	/***************/ ENTRY(t2); /***************/
	WD_TRACE(("wd: t2 tr=%u, sr=%u, side=%u, cr=%x, time=%s\n", wd.tr, wd.sr, wd.cr_c & TYPEII_BIT_S ? 1 : 0, wd.cr_c, ticks_str(get_ticks())));

	floppy_set_sec_id(wd.sr);

	if ((wd.cr_c & TYPEII_BIT_E) == 0) {
		JUMP(t2_hlt);
	}
	SET_TIMER(DATA_DELAY);
	/***************/ ENTRY(t2_waitd); /***************/
	WDH_TRACE(("wd: t2_waitd time=%s\n", ticks_str(get_ticks())));

    WAIT_TIMER();
	/***************/ ENTRY(t2_hlt); /***************/
	WD_TRACE(("wd: t2_hlt time=%s\n", ticks_str(get_ticks())));

    if (!wd_is_hld()) {
		WAIT();
    }
    // TG43
	/***************/ ENTRY(t2_loop); /***************/
	WD_TRACE(("wd: t2_loop time=%s\n", ticks_str(get_ticks())));

	if ((wd.cr_c & TYPEII_WR_MASK) == TYPEII_WR) {
		if (fdc_query(FDC_WP)) {
			WD_TRACE(("wd: t2_loop disk is wp\n"));
			wd.str |= WD17XX_STAT_WP;
			JUMP(done);
		}
	}
	wd.icnt = 0;
	/***************/ ENTRY(t2_amc); /***************/

	if (wd.icnt >= 6) {
		wd.str |= WD17XX_STAT_NOTFOUND;
		JUMP(done);
	}
	stat = floppy_stat();
	if ((stat & FLP_STAT_AM) == 0) {
		WAIT();
	}
	if (!wd_rd_am(am)) {
		JUMP(done);
	}

	WD_TRACE(("wd: t2_amc, sz=%u (trk,side,sec) dsk(%u,%u,%u) wd(%u,%u,%u) time=%s\n", am[3], am[0], am[1], am[2], wd.tr, wd.cr_c & TYPEII_BIT_S ? 1 : 0, wd.sr, ticks_str(get_ticks())));

    if (wd.tr != am[0]) {
		if( floppy_fast_mode )
		{
		    wd.str |= WD17XX_STAT_NOTFOUND;
            JUMP(done);
		}
		else WAIT();
	}

	if (wd.sr != am[2]) {
		WAIT();
	}

	// 1795 - other operation
	if ( (wd.cr_c & TYPEII_BIT_C) != 0 )
	{
		byte side = ( wd.cr_c & TYPEII_BIT_S ) != 0 ? 0 : 1;
		if ( side == am[1] )
		{
			WAIT();
		}
	}

	wd.dcnt = wd_sect_size(am[3]);
    BDI_ResetWrite();
    SET_TIMER_DCNT( wd.dcnt );

	if ((wd.cr_c & TYPEII_WR_MASK) == TYPEII_WR)
	{
	    BDI_ResetRead( wd.dcnt - 1 );

		WD_TRACE(("wd: t2_amc, SET_DRQ() time=%s\n", ticks_str(get_ticks())));
		WD_SET_DRQ();
		JUMP(t2_wr);
	}
	/***************/ ENTRY(t2_rd); /***************/
	WD_TRACE(("wd: t2_rd time=%s\n", ticks_str(get_ticks())));

	stat = floppy_stat();
	if ((stat & FLP_STAT_AM) != 0) {
		wd.str |= WD17XX_STAT_NOTFOUND;
		JUMP(done);
	}

	// put record type in status reg bit 5
	if ((stat & FLP_STAT_DEL) != 0) {
		wd.str |= WD17XX_STAT_RECTYPE;  // 1 = deleted record, 0 - normal record
	} else {
		wd.str &= ~WD17XX_STAT_RECTYPE; // 1 = deleted record, 0 - normal record
	}

	/***************/ ENTRY(t2_rdblk); /***************/
	WDH_TRACE(("wd: t2_rdblk dcnt=%u, time=%s\n", wd.dcnt, ticks_str(get_ticks())));

    while( wd.dcnt > 1 )
    {
        wd_floppy_read();
        BDI_Write( wd.dsr );
        wd.dcnt--;
    }

	// has first byte been assembled in dsr
	if (!WD_DRQ())
	{
	t2_rd_common:
		if (wd.dcnt == 0) {
			stat = floppy_stat();
			if( ( stat & FLP_STAT_ERR ) != 0 ) wd.str |= WD17XX_STAT_CRCERR;
			if( ( wd.str & WD17XX_STAT_CRCERR ) != 0 ) JUMP(done);
			JUMP(t2_mchk);
		}
		wd_floppy_read();
		wd.dr = wd.dsr;
		wd.dcnt -= 1;
		WD_SET_DRQ();
	} else {
		if (TIMER_EXP()) {
			WD_TRACE(("wd: t2_rdblk - set LOST, time=%s (byte time=%s, drq time=%s)\n", ticks_str(get_ticks()), ticks_str1(wd.delta_time), ticks_str2(wd.start_time)));
			//__TRACE( "wd: t2_rdblk - set LOST\n" );
			wd.str |= WD17XX_STAT_LOST;
			wd.str |= WD17XX_STAT_CRCERR;
			BDI_ResetWrite();
			goto t2_rd_common;
		}
	}

	WAIT();
	/***************/ ENTRY(t2_mchk); /***************/
	WD_TRACE(("wd: t2_mchk wdstat=%x, flp_stat=%x, time=%s\n", wd.str, stat, ticks_str(get_ticks())));

	if ((wd.cr_c & TYPEII_BIT_M) != 0) {
		wd.sr += 1;
		JUMP(t2_loop);
	}
	WD_TRACE(("wd: end of read\n"));
	JUMP(done);
	/***************/ ENTRY(t2_wr); /***************/
	WDH_TRACE(("wd: t2_wr dcnt=%u, time=%s\n", wd.dcnt, ticks_str(get_ticks())));

    while( BDI_Read( &wd.dsr ) )
    {
        wd_floppy_write();
        wd.dcnt--;
    }

	if (!WD_DRQ())
	{
		wd.dsr = wd.dr;
    t2_wr_common:
		wd_floppy_write();
		wd.dcnt -= 1;
		if (wd.dcnt == 0) {
			stat = floppy_stat();
			if( ( stat & FLP_STAT_ERR ) != 0 ) wd.str |= WD17XX_STAT_CRCERR;
			if( ( wd.str & WD17XX_STAT_CRCERR ) != 0 ) JUMP(done);
			JUMP(t2_mchk);
		}
		WD_SET_DRQ();
	} else {
		if (TIMER_EXP()) {
			WD_TRACE(("wd: t2_wr - set LOST, time=%s (byte time=%s, drq time=%s)\n", ticks_str(get_ticks()), ticks_str1(wd.delta_time), ticks_str2(wd.start_time)));
		    //__TRACE( "wd: t2_wr - set LOST\n" );
		    BDI_ResetRead(0);
			wd.str |= WD17XX_STAT_LOST;
			wd.str |= WD17XX_STAT_CRCERR;
			wd.dsr = 0;
			goto t2_wr_common;
		}
	}
	WAIT();
	//=========================================================
	// type 3
	//=========================================================
	/***************/ ENTRY(t3); /***************/
	WD_TRACE(("wd: t3 time=%s\n", ticks_str(get_ticks())));

	if ((wd.cr_c & TYPEIII_BIT_E) == 0) {
		JUMP(t3_hlt);
	}
	SET_TIMER(DATA_DELAY);
	/***************/ ENTRY(t3_wait); /***************/
	WDH_TRACE(("wd: t3_wait time=%s\n", ticks_str(get_ticks())));

    WAIT_TIMER();
	/***************/ ENTRY(t3_hlt); /***************/
	WD_TRACE(("wd: t3_hlt time=%s\n", ticks_str(get_ticks())));

    if (!wd_is_hld()) {
		WAIT();
    }
    wd.icnt = 0;
    wd.dcnt = 6;
    wd_crc_init();
    BDI_ResetWrite();

	/***************/ ENTRY(t3_rdam); /***************/
	WDH_TRACE(("wd: t3_rdam time=%s\n", ticks_str(get_ticks())));

	if (wd.icnt >= 6) {
		wd.str |= WD17XX_STAT_NOTFOUND;
		JUMP(done);
	}

	if (wd.dcnt == 6) {
		stat = floppy_stat();
		if ((stat & FLP_STAT_AM) == 0) {
			WAIT();
		}
	}

    while( wd.dcnt > 1 )
    {
        wd_floppy_read();
        BDI_Write( wd.dsr );
        wd.dcnt--;
    }

	if (!WD_DRQ()) {
		if (wd.dcnt == 0) {
			WD_TRACE(("wd: rd_am, crc=0x%04x\n", wd.crc));
			WD_TRACE(("wd: rd_am (%u,%u,%u,%u), crc=0x%02x%02x\n", am[5], am[4], am[3], am[2], am[1], am[0]));
			if (wd.crc != 0) {
				wd.str |= WD17XX_STAT_CRCERR;
			}
			JUMP(done);
		}

		wd_floppy_read();
		wd.dr = wd.dsr;
		wd.dcnt -= 1;
#if defined(DEBUG) && DEBUG
		am[wd.dcnt] = wd.dsr;
#endif
		if (wd.dcnt == 5) {
			wd.sr = wd.dsr;
		}
		WD_SET_DRQ();
	}
	WAIT();
	//=========================================================
	// type 4
	//=========================================================
	/***************/ ENTRY(t4); /***************/

    WAIT_TIMER();

	i_met = INTR_MASK_I3;
	if (wd.ready != fdc_query(FDC_READY)) {
		i_met |= wd.ready ? INTR_MASK_I1 : INTR_MASK_I0;
		wd.ready = !wd.ready;
	}
	if (wd.index) {
		i_met |= INTR_MASK_I2;
	}
	if ((i_met & wd.cr & INTR_MASK) == 0) {
		WAIT();
	}
	JUMP(done);
	/***************/ ENTRY(reset); /***************/
	WAIT();
	/***************/ ENTRY(done); /***************/
	fdc_set(FDC_STEP, 0);
	WD_TRACE(("wd: clr busy signal (#2)\n\n"));
	WD_CLR_BUSY();
	//WD_CLR_DRQ();
	WD_SET_INT();
	STATE(t0);
}
void KariudoKen::_Move()
{
	SetAnim( mStatus );

	// 自機の位置を取得
	int jx = GAMECONTROL->GetJiki()->GetAtHtPointX();
	int jy = GAMECONTROL->GetJiki()->GetAtHtPointY();

	// ----当たりの処理
	MapAtHt();

	if( mStatus != SHINDA )
		Ataridp();


	switch( mStatus ){
		case ARUKI: {
			// ----自機の位置を確認
			float sax = jx - CenterX();
			float say = jy - CenterY();
			float sa = sqrt(sax*sax + say*say);

			if( sa < KARIKENKGHANI ){
				mStatus = WAIT1;
			}

			break;
		}
		
		case WAIT1:
			mSpX = 0;
			WAIT_TIMER(mKgTimer, KARIKENWTM1);
			mStatus = KOGEKI;
			WAIT_END
			break;

		case KOGEKI:
			if( mAniNoX == 2 &&  !mSeFl ){//SE
				//SE
				if( !IsGamenGai() )
					GAMECONTROL->GetSoundController()->PlaySE("audio\\se\\se_ken_atack.wav");
				mSeFl = true;
			}
			mSpX = 0;
			mMuki = CenterX() < jx;
			if( mDousaEnd ){
				mStatus = WAIT2;
				mSeFl = false;
			}
			break;
	
		case WAIT2:
			mSpX = 0;
			WAIT_TIMER(mKgTimer, KARIKENWTM2);
			mStatus = ARUKI;
			WAIT_END
			break;
	}
	
	Draw();

	mSpX += mAccX;
	mSpY += mAccY;
	mX	 += mSpX + mAshibaSpX;
	mY	 += mSpY;

	// 当たり判定のフレーム
	if( mStatus != SHINDA )
		HtFrame();
}
void CurtainRollScr::UpdateStage()
{
	switch( mStage ){

	// フェードイン
	case FADING:	
		if( GAMECONTROL->GetFader()->FadeIn() ){
			//幕をあげる
			GAMECONTROL->GetMaku()->Open();
			mStage = OPENING;
		}
		break;

	// 幕アップ
	case OPENING:
		if( GAMECONTROL->GetMaku()->IsOpen() ){
			mStage = WAIT1SEC;
		}
		break;

	// 1秒待機
	case WAIT1SEC:
		WAIT_TIMER(mTimer, 1.0f)
			GAMECONTROL->GetTxtGraphicController()->ShowWithAlphaFade( TxtGraphicController::CENTER, 
				GI("THANKSSX"), GI("THANKSSY"), "graphics\\screen\\thank_you.png", 3.0f, 0.05f );
			mStage = THANKSPLAYING;
		WAIT_END
		break;

	// サンキュー
	case THANKSPLAYING:
		if( GAMECONTROL->GetTxtGraphicController()->IsFinished() )
			mStage = WAIT1SECMORE;
		break;

	// さらに1秒待機
	case WAIT1SECMORE:
		WAIT_TIMER(mTimer, 1.0f)
			mStage = HEROINE_ENTERING;
			heroine->SetPos(500-GI("HERSIZE"), GI("FLOORY") - GI("HERSIZE"));
			heroine->GetAnimationSet()->SetCurAnimation(HERAN_WALK);
			heroine->SetSp( GF("SPWALK"), 0 );
			GAMECONTROL->GetMobManager()->Request( heroine, true );
		WAIT_END
		break;

	// ヒロイン登場
	case HEROINE_ENTERING:
		if( heroine->GetX() >= 500+170-GI("HERSIZE") ){
			heroine->SetSp(0,0);
			heroine->GetAnimationSet()->SetCurAnimation(HERAN_STOP);
			mStage = HEROINE_STOP1SEC;
		}
		break;

	// ヒロイン停止
	case HEROINE_STOP1SEC:
		WAIT_TIMER(mTimer, 1.0f)
			mStage = HEROINE_ATTACK;
			heroine->GetAnimationSet()->SetCurAnimation(HERAN_ATT);
			heroine->SetSp( GF("SPWALK"), 0 ) ;
			heroine->SetAcc( GF("ACCKOGEKI") / SP->FRAMERATE, 0 );
			GAMECONTROL->GetSoundController()->LoopSE("audio\\se\\se_hiroin_tijoukougeki.wav");
		WAIT_END
		break;

	// ヒロイン攻撃
	case HEROINE_ATTACK:
		// 敵に当たったら敵が死ぬ
		for(int i=0; i<7; i++){
			if( actors[i]->IsJikiColliding() && actors[i]->GetAnimationSet()->GetCurAnimationIdx() == TEKI_STAND ){
				actors[i]->GetAnimationSet()->SetCurAnimation( TEKI_DIE );
				actors[i]->SetSp( GF("SHINIPATT_SPX"), -GF("SHINIPATT_SHOSP") );
				actors[i]->SetAcc( 0, SP->GRAVITY );
				GAMECONTROL->GetSoundController()->PlaySE("audio\\se\\se_kougekimeityuu.wav");
			}
		}

		// 到着
		if( heroine->GetX() >= 500+740-GI("HERSIZE") && 
			heroine->GetAnimationSet()->GetCurAnimation()->GetCurFrameIdx() == 3)
		{
			heroine->SetSp(0,0);
			heroine->SetAcc(0,0);
			heroine->GetAnimationSet()->SetCurAnimation(HERAN_ATTEND);
			mStage = HEROINE_ATTACKEND;
			GAMECONTROL->GetSoundController()->StopSE("audio\\se\\se_hiroin_tijoukougeki.wav");
		}
		break;

	// 攻撃終了動作
	case HEROINE_ATTACKEND:
		if( heroine->GetAnimationSet()->GetCurAnimation()->GetLoopCount() == 1 ){
			heroine->GetAnimationSet()->SetCurAnimation(HERAN_STOP);
			mStage = HEROINE_STOP1SECMORE;
		}
		break;

	// さらに1秒停止
	case HEROINE_STOP1SECMORE:
		WAIT_TIMER(mTimer, 1.0f)
			mStage = SEEYOUAGAIN;
			GAMECONTROL->GetTxtGraphicController()->ShowWithAlphaFade( TxtGraphicController::CENTER, 
				GI("SEEYOUSX"), GI("SEEYOUSY"), "graphics\\screen\\see_you_again.png", 3.0f, 0.05f );
		WAIT_END
		break;

	// また遊んでね
	case SEEYOUAGAIN:
		if( GAMECONTROL->GetTxtGraphicController()->IsFinished() ){
			mStage = CLOSINGANDFADINGOUT;
			GAMECONTROL->GetMaku()->Close();
		}
		break;

	// バイバイ
	case CLOSINGANDFADINGOUT:
		if( GAMECONTROL->GetMaku()->IsClosed() ){
			if( GAMECONTROL->GetFader()->FadeOut() ){
				GAMECONTROL->GetSoundController()->ResetBGMs();
				GAMECONTROL->GetStageManager()->GoToStage(1);
			}
		}
		break;
	}
}