VOID PAL_NEW_EndingScreen2( VOID ) /*++ Purpose: 显示结尾处的人物介绍,对应95/98版的第六个avi视频 Parameters: None. Return value: None. --*/ { PAL_SetPalette(5, FALSE);//不加这句有可能会出现白屏的情况 //1141 00A5 0031 FFFF 0007 淡入FBP图片 49 65535 07 PAL_EndingSetEffectSprite(0x27b); PAL_ShowFBP(49, 7); //1142 0076 0031 0006 0000 显示FBP图像 49 06 PAL_EndingSetEffectSprite(0); PAL_ShowFBP(49, 6); //1143 004D 0000 0000 0000 等待按键 PAL_WaitForKey(0); //1144 0077 0001 0000 0000 停止播放音乐 01 PAL_PlayMUS(0, FALSE, 0.5); UTIL_Delay(500); //1145 0043 0009 0003 0000 设置播放音乐 09 if (!SOUND_PlayCDA(13)) { PAL_PlayMUS(9, TRUE, 0); } //1146 00A4 0030 0000 0010 卷动FBP图片 48 00 16 int i = 48; PAL_ScrollFBP(i--, 0xf, TRUE); PAL_ScrollFBP(i--, 0xf, TRUE); PAL_ScrollFBP(i--, 0xf, TRUE); PAL_ScrollFBP(i--, 0xf, TRUE); PAL_ScrollFBP(i--, 0xf, TRUE); PAL_ScrollFBP(i--, 0xf, TRUE); PAL_ScrollFBP(i--, 0xf, TRUE); PAL_ScrollFBP(i--, 0xf, TRUE); PAL_ScrollFBP(i--, 0xf, TRUE); //1150 0077 0001 0000 0000 停止播放音乐 01 PAL_PlayMUS(0, FALSE, 3); //1151 0050 0004 0000 0000 全屏淡出 PAL_FadeOut(3); }
VOID PAL_NEW_EndingScreen1( VOID ) /*++ Purpose: 显示结尾处的消灭合体水魔兽的动画,对应95/98版的第4、5个avi视频 Parameters: None. Return value: None. --*/ { //1128 0043 0019 0000 0000 设置播放音乐 25 PAL_PlayMUS(0x19, TRUE, 0); //1129 008B 0005 0000 0000 改变调色板 05 PAL_SetPalette(5, FALSE); //112A 00A4 0044 0000 000F 卷动FBP图片 68 00 15 PAL_ScrollFBP(68, 0xf, TRUE); //112B 0050 0000 0000 0000 全屏淡出 PAL_FadeOut(1); SDL_FillRect(gpScreen, NULL, 0); //112C 008B 0004 0000 0000 改变调色板 04 PAL_SetPalette(4, FALSE); //112D 0096 0000 0000 0000 播放结束动画 PAL_EndingAnimation(); gpGlobals->wNumPalette = 4; //112E 0077 0001 0000 0000 停止播放音乐 01 PAL_PlayMUS(0, FALSE, 1); //112F 008C 000F 0007 0000 屏幕逐渐褪色 15 07 00 PAL_ColorFade(7, 15, FALSE); //1131 00A3 0002 0011 0000 播放CD音轨 02 若失败 则播放RIX 17 if (!SOUND_PlayCDA(2)) { RIX_Play(0x11, TRUE, 0); } SDL_FillRect(gpScreen, NULL, 0); //1132 0036 000B 0000 0000 设置动画 11 //1133 0037 0000 0001 0000 播放动画 00 01 00 PAL_RNGPlay(0xb, 0, 1, 7); //1134 008B 0000 0000 0000 改变调色板 00 PAL_SetPalette(0, FALSE); //1135 0037 0002 0000 0007 播放动画 02 00 07 PAL_RNGPlay(0xb, 2, 999, 7); //1136 0050 0003 0000 0000 全屏淡出 PAL_FadeOut(3); SDL_FillRect(gpScreen, NULL, 0); //1137 008B 0008 0000 0000 改变调色板 08 PAL_SetPalette(8, FALSE); //1138 0036 000A 0000 0000 设置动画 10 //1139 0037 0000 0000 0006 播放动画 00 00 06 PAL_RNGPlay(10, 0, 999, 6); //113A 0076 0047 000A 0000 显示FBP图像 71 10 PAL_EndingSetEffectSprite(0); PAL_ShowFBP(71, 10); //113B 00A6 0000 0000 0000 备份画面 VIDEO_BackupScreen(); //113C 00A5 0046 027B 0007 淡入FBP图片 70 635 07 PAL_EndingSetEffectSprite(0x27b); PAL_ShowFBP(70, 7); //113D 008B 0005 0000 0000 改变调色板 05 PAL_SetPalette(5, FALSE); //113E 00A5 0043 FFFF 0007 淡入FBP图片 67 65535 07 PAL_ShowFBP(67, 7); //113F 00A4 0042 FFFF 0007 卷动FBP图片 66 65535 07 PAL_ScrollFBP(66, 0xf, TRUE); //1140 00A5 0041 FFFF 0007 淡入FBP图片 65 65535 07 PAL_ShowFBP(65, 7); }
VOID PAL_EndingScreen( VOID ) { RIX_Play(0x1a, TRUE, 0); PAL_RNGPlay(gpGlobals->iCurPlayingRNG, 110, 150, 7); PAL_RNGPlay(gpGlobals->iCurPlayingRNG, 151, 999, 9); PAL_FadeOut(2); RIX_Play(0x19, TRUE, 0); PAL_ShowFBP(75, 0); PAL_FadeIn(5, FALSE, 1); PAL_ScrollFBP(74, 0xf, TRUE); PAL_FadeOut(1); SDL_FillRect(gpScreen, NULL, 0); gpGlobals->wNumPalette = 4; gpGlobals->fNeedToFadeIn = TRUE; PAL_EndingAnimation(); RIX_Play(0, FALSE, 2); PAL_ColorFade(7, 15, FALSE); if (!SOUND_PlayCDA(2)) { RIX_Play(0x11, TRUE, 0); } SDL_FillRect(gpScreen, NULL, 0); PAL_SetPalette(0, FALSE); PAL_RNGPlay(0xb, 0, 999, 7); PAL_FadeOut(2); SDL_FillRect(gpScreen, NULL, 0); gpGlobals->wNumPalette = 8; gpGlobals->fNeedToFadeIn = TRUE; PAL_RNGPlay(10, 0, 999, 6); PAL_EndingSetEffectSprite(0); PAL_ShowFBP(77, 10); VIDEO_BackupScreen(); PAL_EndingSetEffectSprite(0x27b); PAL_ShowFBP(76, 7); PAL_SetPalette(5, FALSE); PAL_ShowFBP(73, 7); PAL_ScrollFBP(72, 0xf, TRUE); PAL_ShowFBP(71, 7); PAL_ShowFBP(68, 7); PAL_EndingSetEffectSprite(0); PAL_ShowFBP(68, 6); PAL_WaitForKey(0); RIX_Play(0, FALSE, 1); UTIL_Delay(500); if (!SOUND_PlayCDA(13)) { RIX_Play(9, TRUE, 0); } PAL_ScrollFBP(67, 0xf, TRUE); PAL_ScrollFBP(66, 0xf, TRUE); PAL_ScrollFBP(65, 0xf, TRUE); PAL_ScrollFBP(64, 0xf, TRUE); PAL_ScrollFBP(63, 0xf, TRUE); PAL_ScrollFBP(62, 0xf, TRUE); PAL_ScrollFBP(61, 0xf, TRUE); PAL_ScrollFBP(60, 0xf, TRUE); PAL_ScrollFBP(59, 0xf, TRUE); RIX_Play(0, FALSE, 6); PAL_FadeOut(3); }
INT PAL_OpeningMenu( VOID ) /*++ Purpose: Show the opening menu. Parameters: None. Return value: Which saved slot to load from (1-5). 0 to start a new game. --*/ { WORD wItemSelected; WORD wDefaultItem = 0; MENUITEM rgMainMenuItem[2] = { // value label enabled position { 0, MAINMENU_LABEL_NEWGAME, TRUE, PAL_XY(125, 95) }, { 1, MAINMENU_LABEL_LOADGAME, TRUE, PAL_XY(125, 112) } }; // // Play the background music // PAL_PlayMUS(RIX_NUM_OPENINGMENU, TRUE, 1); // // Draw the background // PAL_DrawOpeningMenuBackground(); PAL_FadeIn(0, FALSE, 1); while (TRUE) { // // Activate the menu // wItemSelected = PAL_ReadMenu(NULL, rgMainMenuItem, 2, wDefaultItem, MENUITEM_COLOR); if (wItemSelected == 0 || wItemSelected == MENUITEM_VALUE_CANCELLED) { // // Start a new game // wItemSelected = 0; break; } else { // // Load game // wItemSelected = PAL_SaveSlotMenu(1); if (wItemSelected != MENUITEM_VALUE_CANCELLED) { break; } wDefaultItem = 1; } } // // Fade out the screen and the music // PAL_PlayMUS(0, FALSE, 1); PAL_FadeOut(1); return (INT)wItemSelected; }
static BOOL PAL_SystemMenu( VOID ) /*++ Purpose: Show the system menu. Parameters: None. Return value: TRUE if user made some operations in the menu, FALSE if user cancelled. --*/ { LPBOX lpMenuBox; WORD wReturnValue; int iSlot, i, iSavedTimes; FILE *fp; const SDL_Rect rect = {40, 60, 100, 135}; // // Create menu items // #ifdef PAL_CLASSIC MENUITEM rgSystemMenuItem[5] = { // value label enabled pos { 1, SYSMENU_LABEL_SAVE, TRUE, PAL_XY(53, 72) }, { 2, SYSMENU_LABEL_LOAD, TRUE, PAL_XY(53, 72 + 18) }, { 3, SYSMENU_LABEL_MUSIC, TRUE, PAL_XY(53, 72 + 36) }, { 4, SYSMENU_LABEL_SOUND, TRUE, PAL_XY(53, 72 + 54) }, { 5, SYSMENU_LABEL_QUIT, TRUE, PAL_XY(53, 72 + 72) }, }; #else MENUITEM rgSystemMenuItem[6] = { // value label enabled pos { 1, SYSMENU_LABEL_SAVE, TRUE, PAL_XY(53, 72) }, { 2, SYSMENU_LABEL_LOAD, TRUE, PAL_XY(53, 72 + 18) }, { 3, SYSMENU_LABEL_MUSIC, TRUE, PAL_XY(53, 72 + 36) }, { 4, SYSMENU_LABEL_SOUND, TRUE, PAL_XY(53, 72 + 54) }, { 5, SYSMENU_LABEL_BATTLEMODE, TRUE, PAL_XY(53, 72 + 72) }, { 6, SYSMENU_LABEL_QUIT, TRUE, PAL_XY(53, 72 + 90) }, }; #endif // // Create the menu box. // #ifdef PAL_CLASSIC lpMenuBox = PAL_CreateBox(PAL_XY(40, 60), 4, 3, 0, TRUE); #else lpMenuBox = PAL_CreateBox(PAL_XY(40, 60), 5, 3, 0, TRUE); #endif VIDEO_UpdateScreen(&rect); // // Perform the menu. // #ifdef PAL_CLASSIC wReturnValue = PAL_ReadMenu(PAL_SystemMenu_OnItemChange, rgSystemMenuItem, 5, gpGlobals->iCurSystemMenuItem, MENUITEM_COLOR); #else wReturnValue = PAL_ReadMenu(PAL_SystemMenu_OnItemChange, rgSystemMenuItem, 6, gpGlobals->iCurSystemMenuItem, MENUITEM_COLOR); #endif if (wReturnValue == MENUITEM_VALUE_CANCELLED) { // // User cancelled the menu // PAL_DeleteBox(lpMenuBox); VIDEO_UpdateScreen(&rect); return FALSE; } switch (wReturnValue) { case 1: // // Save game // iSlot = PAL_SaveSlotMenu(gpGlobals->bCurrentSaveSlot); if (iSlot != MENUITEM_VALUE_CANCELLED) { gpGlobals->bCurrentSaveSlot = (BYTE)iSlot; iSavedTimes = 0; for (i = 1; i <= 5; i++) { fp = fopen(va("%s%d%s", PAL_SAVE_PREFIX, i, ".rpg"), "rb"); if (fp != NULL) { WORD wSavedTimes; fread(&wSavedTimes, sizeof(WORD), 1, fp); fclose(fp); wSavedTimes = SWAP16(wSavedTimes); if ((int)wSavedTimes > iSavedTimes) { iSavedTimes = wSavedTimes; } } } PAL_SaveGame(va("%s%d%s", PAL_SAVE_PREFIX, iSlot, ".rpg"), iSavedTimes + 1); } break; case 2: // // Load game // iSlot = PAL_SaveSlotMenu(gpGlobals->bCurrentSaveSlot); if (iSlot != MENUITEM_VALUE_CANCELLED) { PAL_PlayMUS(0, FALSE, 1); PAL_FadeOut(1); PAL_InitGameData(iSlot); } break; case 3: // // Music // g_fNoMusic = !PAL_SwitchMenu(!g_fNoMusic); #ifdef PAL_HAS_NATIVEMIDI if (g_fUseMidi) { if (g_fNoMusic) { PAL_PlayMUS(0, FALSE, 0); } else { PAL_PlayMUS(gpGlobals->wNumMusic, TRUE, 0); } } #endif break; case 4: // // Sound // g_fNoSound = !PAL_SwitchMenu(!g_fNoSound); break; #ifndef PAL_CLASSIC case 5: // // Battle Mode // PAL_BattleSpeedMenu(); break; case 6: #else case 5: #endif // // Quit // if (PAL_ConfirmMenu()) { PAL_PlayMUS(0, FALSE, 2); PAL_FadeOut(2); PAL_Shutdown(); exit(0); } break; } PAL_DeleteBox(lpMenuBox); return TRUE; }
VOID PAL_StartFrame( VOID ) /*++ Purpose: Starts a video frame. Called once per video frame. Parameters: None. Return value: None. --*/ { // // Run the game logic of one frame // PAL_GameUpdate(TRUE); if (gpGlobals->fEnteringScene) { return; } // // Update the positions and gestures of party members // PAL_UpdateParty(); // // Update the scene // PAL_MakeScene(); VIDEO_UpdateScreen(NULL); if (g_InputState.dwKeyPress & kKeyMenu) { // // Show the in-game menu // PAL_InGameMenu(); } else if (g_InputState.dwKeyPress & kKeyUseItem) { // // Show the use item menu // PAL_GameUseItem(); } else if (g_InputState.dwKeyPress & kKeyThrowItem) { // // Show the equipment menu // PAL_GameEquipItem(); } else if (g_InputState.dwKeyPress & kKeyForce) { // // Show the magic menu // PAL_InGameMagicMenu(); } else if (g_InputState.dwKeyPress & kKeyStatus) { // // Show the player status // PAL_PlayerStatus(); } else if (g_InputState.dwKeyPress & kKeySearch) { // // Process search events // PAL_Search(); } else if (g_InputState.dwKeyPress & kKeyFlee) { // // Quit Game // if (PAL_ConfirmMenu()) { PAL_PlayMUS(0, FALSE, 2); PAL_FadeOut(2); PAL_Shutdown(); exit(0); } } if (--gpGlobals->wChasespeedChangeCycles == 0) { gpGlobals->wChaseRange = 1; } }