📄 gameplay.c
字号:
//Player
Hit_Player();
//fish2_1
Hit_Fish2();
//fish3_1 and 3_2
Hit_Fish3();
//fish4_1
Hit_Fish4();
}
/**
* BW_PlayLoop - game play loop function.
*/
void BW_PlayLoop(void)
{
U8 i;
if ( g_nPlayerState != ST_HIDE && g_nPlayerState != ST_DEATH )
{
//check input device
Play_ProcessInput();
//screen movement
Play_MoveScreen();
//collision detection
ProcCollision();
}
//fish management
Play_ManageFish();
//property management
//score update
E_ChangeAction(pNormal[COUNTTROUGH], (g_nScore/(SCORE_RATE*g_nPlayerLevel)) );
//Player death
if ( g_nPlayerState == ST_DEATH
&& (g_nDeathCnt++) > 10 )
{
#ifdef AUDIO_ENABLE
//TM_StopPCM(AUDIO_NO5);
TM_PlayPCM((U8 *)RES_WAVESFX_DIE2_DRM, 64, 127);
#endif
g_nDeathCnt = 0;
g_nScreenStep_X = abs(g_aTextPos_X[TEXT2]-192);
g_nScreenStep_Y = (U8)(abs(iTextCount_Y[TEXT2]));
if ( g_aTextPos_X > 192 )
{
g_nPlayerAx = TO_LEFT;
}
else
{
g_nPlayerAx = TO_RIGHT;
}
if ( iTextCount_Y < 0 )
{
g_nPlayerAy = TO_DOWN;
}
else
{
g_nPlayerAy = TO_UP;
}
nPlayState = PLAY_RELIVE;
E_ChangeAction(pNormal[COUNTTROUGH], 0);
if ( g_nText3Mode )
{
FadeOut();
}
else
{
FadeOut();
(*P_PPU_TX3_Control)=0x1103;
}
}
if ( g_bInvincibleFlag )
{
if ( (g_nInvincibleCnt++) > 10 )
{
g_bInvincibleFlag = false;
}
}
//Motion Process
E_MotionProc();
g_nScreenStep_X = 0;
g_nScreenStep_Y = 0;
//show sprite
PPU_ShowSprite(true);
//wait blanking
WaitBlanking();
//pause
if (g_stEvent.Ev_Key == VK_START )
{
nPlayState = PLAY_MENU;
g_nMenuID = 0;
//g_bMenuColor = true;
pMenu = E_AllocMotion(&Menu_Action[0], 0, 128, 48, SP_PRIO_14);
pSelectBox = E_AllocMotion(&Select_Action[0], 0, 192, 160, SP_PRIO_15);
#ifdef AUDIO_ENABLE
//TM_StopPCM(AUDIO_NO0);
TM_PlayPCM((U8 *)RES_WAVESFX_SELECT_DRM, 64, 127);
#endif
}
//player update
if ( (g_nScore/(SCORE_RATE*g_nPlayerLevel)) >= 10 )
{
if (g_nPlayerLevel == LEVEL2)
{
nPlayState = PLAY_COMPLETE;
g_bCompleteColor = true;//change palette
g_nTrackCnt = 0;
pMenu = E_AllocMotion(&Complete_Action[0], 0, 160, -128, SP_PRIO_14);
pSelectBox = E_AllocMotion(&Thanks_Action[0], 0, -384, 200, SP_PRIO_15);
#ifdef AUDIO_ENABLE
//TM_StopPCM(AUDIO_NO1);
TM_PlayPCM((U8 *)RES_WAVESFX_BECOME2_DRM, 64, 127);
#endif
}
if (g_nPlayerLevel == LEVEL1)
{
g_nPlayerLevel = LEVEL2;
E_ChangeAction(pPlayer, ((g_nPlayerLevel-1)*12 + g_nPlayerAx + 1));
g_nPlayerState = g_nPlayerAx + 1;
g_bScoreColor = true;
g_nScore = 0;
#ifdef AUDIO_ENABLE
//TM_StopPCM(AUDIO_NO1);
TM_PlayPCM((U8 *)RES_WAVESFX_BECOME1_DRM, 64, 127);
#endif
#ifdef MIDI_ENABLE
StopMidi();
//SetMidiVolume(0);
//SetMidiChannelMask(0x0000, 0xFFFF);
//InitSPU(); // tested by Bruce
PlayMidi(MIDI_LEV2, SS_PLAYMIDI_INFINITY);
//SetMidiVolume(127);
#endif
}
}
}
/*
void Play_Crazy(void)
{
//shake texture
if ( g_nShakeTime > 0 )//&& g_nShakeCnt < 9 )
{
//if (aShakeValue[g_nShakeCnt*2]<0)
//{
// E_HScroll(TEXT3)
//}
g_aTextPos_X[TEXT1] += aShakeValue[g_nShakeCnt*2];
g_aTextPos_Y[TEXT1] += aShakeValue[g_nShakeCnt*2+1];
(*P_PPU_TX1_X) = g_aTextPos_X[TEXT1];
(*P_PPU_TX1_Y) = g_aTextPos_Y[TEXT1];
if ( (g_nShakeCnt++) == 8 )
{
g_nShakeTime --;
g_nPlayerState = ST_LEFTMOVE;
}
}
PPU_ShowSprite(true);
WaitBlanking();
}
*/
/**
* BW_Play - game play main loop.
*/
GAMESTATE BW_Play(void)
{
U16 aSelectPos[3] = {160, 224, 288};
GAMESTATE tempState;
U8 i;
nPlayState = PLAY_INIT;
//g_nText3Mode = 0; //use text1 for PPU, not for Sensor
while (1)
{
switch(nPlayState)
{
case PLAY_INIT:
if ( g_nText3Mode )
{
InitTV();
}
Sys_Load_SDCard(&LoadPlayInfo, ASZ(LoadPlayInfo));
InitSystem();
LCD_InitBG();
Play_InitVariable();
g_nKeyCnt = 0;
nHMovementCnt = 0;//HMovement clear
g_bHMovementFlag = false;
//Init Sensor
if ( !g_nText3Mode )
{
*(U32*)0x8809004C = 1;// BUF Control Interrupt Mask
InitSensor(OV7648, VGA_Data,PPUFB, TEXT3, TEXT3_PGT_ADDR, TEXT3_PGT_ADDR+0x96000, TEXT3_PGT_ADDR+0x12C000);
// CSI_MDInit();
(*P_PPU_TX3_Control)=0x1103;
//test Motion Detect by xjliu 2005-12-27
/* *P_CSI_MD_CR = MD_DIFF|SAMP_16|FRAME_1|(0x10<<9);
*P_CSI_MD_SADDR = CSI_MD_DIFFBUF;
*P_CSI_IRQEN = *P_CSI_IRQEN|MD_FRAME;
*P_CSI_MD_TH = 12;*/
}
WaitBlanking();
//Init Motion and Sprite
E_InitMotion();
pPlayer = E_AllocMotion(&Actor_Action[0], 1, 256, 176, SP_PRIO_2);
g_nPlayerLevel = LEVEL1;
g_nPlayerState = ST_LEFTMOVE;
g_nOldPlayerState = g_nPlayerState;
//Init foeman fish
Play_InitFish();
E_MotionProc();
PPU_ShowSprite(true);
WaitBlanking();
#ifdef MIDI_ENABLE
//InitSPU();
StopMidi();
//SetMidiChannelMask(0x0000, 0xFFFF);
//SetMidiVolume(127);
//InitSPU(); // tested by Bruce
PlayMidi(MIDI_LEV1, SS_PLAYMIDI_INFINITY);
#endif
if ( g_nText3Mode )
{
FadeIn();
}
else
{
(*P_PPU_TX3_Control)=0x110b;
FadeIn();
}
nPlayState = PLAY_LOOP;
break;
case PLAY_LOOP:
//play loop
/*if ( g_nPlayerState == ST_LEFTCRAZY || g_nPlayerState == ST_RIGHTCRAZY )
{
Play_Crazy();
}*/
//if ( g_nPlayerState < ST_LEFTCRAZY || g_nPlayerState == ST_DEATH )
{
BW_PlayLoop();
}
if ( g_nText3Mode )
{//scroll text
(*P_PPU_TX3_X) = (*P_PPU_TX3_X) + 1;
g_aTextPos_X[TEXT3] = g_aTextPos_X[TEXT3] + 1;
g_bHMovementFlag = true;
}
break;
case PLAY_RELIVE:
PPU_InitTexture();
Play_InitVariable();
//change player state and action
g_nPlayerState = ST_LEFTMOVE;
E_ChangeAction(pPlayer, ((g_nPlayerLevel-1)*12+g_nPlayerState));
E_MotionProc();
pPlayer->pSprite->stPos.x = (SCREEN_WIDTH - pPlayer->pSprite->pFrame->stSize.width)/2;
pPlayer->pSprite->stPos.y = (SCREEN_HEIGHT - pPlayer->pSprite->pFrame->stSize.height)/2;
PPU_ShowSprite(true);
//WaitBlanking();
WaitBlanking();
if ( g_nText3Mode )
{
FadeIn();
}
else
{
(*P_PPU_TX3_Control)=0x110b;
//WaitBlanking();
FadeIn();
}
nPlayState = PLAY_LOOP;
break;
case PLAY_MENU:
g_stEvent.Ev_Key = VK_MAX_NUM;
g_nKeyCnt ++;
if ( g_nKeyCnt > 3)//IGNOREKEY
{
Play_ProcessInput();
g_nKeyCnt = 0;
}
if ( g_stEvent.Ev_Key == VK_UP )
{
if ( g_nMenuID > 0)
g_nMenuID --;
else
g_nMenuID = 2;
#ifdef AUDIO_ENABLE
//TM_StopPCM(AUDIO_NO0);
TM_PlayPCM((U8 *)RES_WAVEBUTTON_DRM, 64, 127);
#endif
}
if ( g_stEvent.Ev_Key == VK_DOWN )
{
if ( g_nMenuID < 2)
g_nMenuID ++;
else
g_nMenuID = 0;
#ifdef AUDIO_ENABLE
//TM_StopPCM(AUDIO_NO0);
TM_PlayPCM((U8 *)RES_WAVEBUTTON_DRM, 64, 127);
#endif
}
if ( g_stEvent.Ev_Key == VK_START )
{
#ifdef AUDIO_ENABLE
//TM_StopPCM(AUDIO_NO0);
TM_PlayPCM((U8 *)RES_WAVESFX_SELECT_DRM, 64, 127);
#endif
switch( g_nMenuID )
{
case 0:
nPlayState = PLAY_LOOP;
E_FreeMotion(pMenu);
E_FreeMotion(pSelectBox);
break;
case 1:
nPlayState = PLAY_END;
//tempState = BW_COMPLETE;
tempState = BW_PRELUDE;//test bug by xjliu
break;
case 2:
nPlayState = PLAY_END;
tempState = BW_PRELUDE;
break;
}
}
pSelectBox->pSprite->stPos.y = aSelectPos[g_nMenuID];
PPU_ShowSprite(true);
WaitBlanking();
break;
case PLAY_COMPLETE:
if ( pSelectBox->pSprite->stPos.x + 384 >= 160)
{
pMenu->pSprite->stPos.x += 128;
}
if (g_nTrackCnt < ASZ(aTrack))
{
pMenu->pSprite->stPos.y += aTrack[g_nTrackCnt++];
}
else
{
if ( pSelectBox->pSprite->stPos.x < 128 )
pSelectBox->pSprite->stPos.x += 128;
else
{//complete game
if ( pMenu->pSprite->stPos.x > SCREEN_WIDTH + 640 )
{
nPlayState = PLAY_END;
//tempState = BW_COMPLETE;
tempState = BW_PRELUDE;
}
}
}
PPU_ShowSprite(true);
WaitBlanking();
break;
case PLAY_END:
FadeOut();
#ifdef MIDI_ENABLE
StopMidi();
//SetMidiVolume(0);
//InitSPU();
#endif
#ifdef AUDIO_ENABLE
/* TM_StopPCM(AUDIO_NO0); // tested by Bruce
TM_StopPCM(AUDIO_NO1);
TM_StopPCM(AUDIO_NO2);
TM_StopPCM(AUDIO_NO3);
TM_StopPCM(AUDIO_NO4);
TM_StopPCM(AUDIO_NO5);
TM_StopPCM(AUDIO_NO6);
TM_StopPCM(AUDIO_NO7); */
#endif
Key_Index = LCD_KEYMIDDLE;
if ( !g_nText3Mode )
{//disable CSI
*P_CSI_TG_CR &= 0xFFFFFFFE;
}
//free motion
E_FreeMotion(pPlayer);
E_FreeMotion(pMenu);
E_FreeMotion(pSelectBox);
for (i = 0; i < g_nCurrentFish1; i ++)
{
if ( pFish1[i] == NULL )
{
continue;
}
E_FreeMotion(pFish1[i]);
}
for (i = 0; i < g_nCurrentFish2; i ++)
{
if ( pFish2[i] == NULL )
{
continue;
}
E_FreeMotion(pFish2[i]);
}
for (i = 0; i < g_nCurrentFish3; i ++)
{
if ( pFish3[i] == NULL )
{
continue;
}
E_FreeMotion(pFish3[i]);
}
if ( pFish4 != NULL)
{
E_FreeMotion(pFish4);
}
for (i = 0; i < NORMAL_NUM; i ++)
{
if ( pNormal[i] == NULL )
{
continue;
}
E_FreeMotion(pNormal[i]);
}
PPU_ShowSprite(true);//clear all sprite
WaitBlanking();
return tempState;
break;
}
}
return BW_GAMESTATE_MAXNUM;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -