static void GameLoop_PrepareAnimation(const HouseAnimation_Animation *animation, const HouseAnimation_Subtitle *subtitle, uint16 arg_8062, const HouseAnimation_SoundEffect *soundEffect) { uint8 i; uint8 colors[16]; s_houseAnimation_animation = animation; s_houseAnimation_subtitle = subtitle; s_houseAnimation_soundEffect = soundEffect; s_houseAnimation_currentSubtitle = 0; s_houseAnimation_currentSoundEffect = 0; g_fontCharOffset = 0; s_var_8062 = arg_8062; s_var_8068 = 0; s_subtitleWait = 0xFFFF; s_subtitleActive = false; s_palettePartDirection = PPD_STOPPED; s_palettePartCount = 0; s_paletteAnimationTimeout = 0; GFX_ClearScreen(); File_ReadBlockFile("INTRO.PAL", g_palette1, 256 * 3); memcpy(g_palette_998A, g_palette1, 256 * 3); Font_Select(g_fontIntro); GFX_Screen_SetActive(SCREEN_0); memcpy(s_palettePartTarget, &g_palette1[(144 + s_houseAnimation_subtitle->colour * 16) * 3], 6 * 3); memset(&g_palette1[215 * 3], 0, 6 * 3); memcpy(s_palettePartCurrent, s_palettePartTarget, 6 * 3); memset(s_palettePartChange, 0, 6 * 3); colors[0] = 0; for (i = 0; i < 6; i++) colors[i + 1] = 215 + i; GUI_InitColors(colors, 0, 15); }
bool GUI_Init(SDL_Surface* s) { GUI_InitColors(s); MainFont = TTF_OpenFont(PG_Application::GetRelativePath("fonts/futuraxk.ttf"), 24); if (!MainFont) { fprintf(stderr, "GUI: Couldn't load font %s", PG_Application::GetRelativePath("fonts/futuraxk.ttf")); return false; } MainFont2 = TTF_OpenFont(PG_Application::GetRelativePath("fonts/futuraxk.ttf"), 28); if (!MainFont2) { fprintf(stderr, "GUI: Couldn't load font %s", PG_Application::GetRelativePath("fonts/futuraxk.ttf")); return false; } BtnFont = TTF_OpenFont(PG_Application::GetRelativePath("fonts/futurab.ttf"), 12); if (!BtnFont) { fprintf(stderr, "GUI: Couldn't load font %s", PG_Application::GetRelativePath("fonts/futurab.ttf")); return false; } BtnFont2 = TTF_OpenFont(PG_Application::GetRelativePath("fonts/futurab.ttf"), 14); if (!BtnFont2) { fprintf(stderr, "GUI: Couldn't load font %s", PG_Application::GetRelativePath("fonts/futurab.ttf")); return false; } GUI_OKDialog1* OKDialog1 = new GUI_OKDialog1(""); GUI_OKDialog2* OKDialog2 = new GUI_OKDialog2(""); OKDialog1->next = OKDialog2; GUI_YNDialog* YNDialog = new GUI_YNDialog; OKDialog2->next = YNDialog; GUI_MainMenu* MainMenu = new GUI_MainMenu; YNDialog->next = MainMenu; GUI_NewGameMenu* NewGameMenu = new GUI_NewGameMenu; MainMenu->next = NewGameMenu; GUI_JoinGameMenu* JoinGameMenu = new GUI_JoinGameMenu; NewGameMenu->next = JoinGameMenu; GUI_OptionsMenu* OptionsMenu = new GUI_OptionsMenu; JoinGameMenu->next = OptionsMenu; GUI_PathsMenu* PathsMenu = new GUI_PathsMenu; OptionsMenu->next = PathsMenu; GUI_CreatePlayerSelMenu* CreatePlayerMenu = new GUI_CreatePlayerSelMenu; PathsMenu->next = CreatePlayerMenu; GUI_CreatePlayerMenu* CreatePlayerMenu1 = new GUI_CreatePlayerMenu(GUI_CREATEPLAYER1, 1); CreatePlayerMenu->next = CreatePlayerMenu1; GUI_CreatePlayerMenu* CreatePlayerMenu2 = new GUI_CreatePlayerMenu(GUI_CREATEPLAYER2, 2); CreatePlayerMenu1->next = CreatePlayerMenu2; GUI_CreatePlayerMenu* CreatePlayerMenu3 = new GUI_CreatePlayerMenu(GUI_CREATEPLAYER3, 3); CreatePlayerMenu2->next = CreatePlayerMenu3; GUI_CreatePlayerMenu* CreatePlayerMenu4 = new GUI_CreatePlayerMenu(GUI_CREATEPLAYER4, 4); CreatePlayerMenu3->next = CreatePlayerMenu4; GUI_CreditsMenu* CreditsMenu = new GUI_CreditsMenu; CreatePlayerMenu4->next = CreditsMenu; GUI_SoundMenu* SoundMenu = new GUI_SoundMenu; CreditsMenu->next = SoundMenu; GUI_ResultsMenu* ResultsMenu = new GUI_ResultsMenu; SoundMenu->next = ResultsMenu; GUI_Help1Menu* Help1Menu = new GUI_Help1Menu; ResultsMenu->next = Help1Menu; GUI_Help2Menu* Help2Menu = new GUI_Help2Menu; Help1Menu->next = Help2Menu; GUI_DeletePlayerMenu* DeletePlayerMenu = new GUI_DeletePlayerMenu; Help2Menu->next = DeletePlayerMenu; GUI_ServerMenu* ServerMenu = new GUI_ServerMenu; DeletePlayerMenu->next = ServerMenu; GUI_VideoMenu* VideoMenu = new GUI_VideoMenu; ServerMenu->next = VideoMenu; GUI_ClientMenu* ClientMenu = new GUI_ClientMenu; VideoMenu->next = ClientMenu; GUI_RedefineKeysMenu* RedefineKeysMenu = new GUI_RedefineKeysMenu; ClientMenu->next = RedefineKeysMenu; OKD1 = OKDialog1; OKD2 = OKDialog2; YND = YNDialog; // register chain of components in GUI_System = OKDialog1; return true; }
/** * Shows the game credits. */ static void GameLoop_GameCredits(void) { static const uint8 colours[] = {0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0}; uint16 i; uint8 *memory; GUI_Mouse_Hide_Safe(); Widget_SetCurrentWidget(20); Sprites_LoadImage("BIGPLAN.CPS", SCREEN_1, g_palette_998A); GUI_ClearScreen(SCREEN_0); GUI_Screen_Copy(g_curWidgetXBase, g_curWidgetYBase, g_curWidgetXBase, g_curWidgetYBase, g_curWidgetWidth, g_curWidgetHeight, SCREEN_1, SCREEN_0); GUI_SetPaletteAnimated(g_palette_998A, 60); Music_Play(0); GameLoop_Uninit(); Music_Play(33); memory = GFX_Screen_Get_ByIndex(SCREEN_2); for (i = 0; i < 256; i++) { uint8 loc06; uint8 loc04; memory[i] = i & 0xFF; loc06 = i / 16; loc04 = i % 16; if (loc06 == 9 && loc04 <= 6) { memory[i] = (g_playerHouseID * 16) + loc04 + 144; } } Sprites_LoadImage("MAPPLAN.CPS", SCREEN_1, g_palette_998A); GUI_Palette_RemapScreen(g_curWidgetXBase << 3, g_curWidgetYBase, g_curWidgetWidth << 3, g_curWidgetHeight, SCREEN_1, memory); GUI_Screen_FadeIn2(g_curWidgetXBase << 3, g_curWidgetYBase, g_curWidgetWidth << 3, g_curWidgetHeight, SCREEN_1, SCREEN_0, 1, false); GameCredits_LoadPalette(); GUI_Mouse_Hide_Safe(); GUI_InitColors(colours, 0, lengthof(colours) - 1); g_fontCharOffset = -1; GFX_SetPalette(g_palette1); for (;; sleepIdle()) { File_ReadBlockFile(String_GenerateFilename("CREDITS"), s_buffer_1832, GFX_Screen_GetSize_ByIndex(SCREEN_3)); GameCredits_Play(s_buffer_1832, 20, SCREEN_1, SCREEN_2, 6); if (Input_Keyboard_NextKey() != 0) break; Music_Play(33); } GUI_SetPaletteAnimated(g_palette2, 60); Driver_Music_FadeOut(); GFX_ClearScreen(); }
static void GameLoop_PlaySubtitle(uint8 animation) { const HouseAnimation_Subtitle *subtitle; uint8 i; uint8 colors[16]; s_var_8068++; GameLoop_PlaySoundEffect(animation); subtitle = &s_houseAnimation_subtitle[s_houseAnimation_currentSubtitle]; if (subtitle->stringID == 0xFFFF || subtitle->animationID > animation) return; if (s_subtitleActive) { if (s_subtitleWait == 0xFFFF) s_subtitleWait = subtitle->waitFadeout; if (s_subtitleWait-- != 0) return; s_subtitleActive = false; s_houseAnimation_currentSubtitle++; s_palettePartDirection = PPD_TO_BLACK; if (subtitle->paletteFadeout != 0) { s_palettePartCount = subtitle->paletteFadeout; for (i = 0; i < 18; i++) { s_palettePartChange[i] = s_palettePartTarget[i] / s_palettePartCount; if (s_palettePartChange[i] == 0) s_palettePartChange[i] = 1; } return; } memcpy(s_palettePartChange, s_palettePartTarget, 18); s_palettePartCount = 1; return; } if (s_subtitleWait == 0xFFFF) s_subtitleWait = subtitle->waitFadein; if (s_subtitleWait-- != 0) return; memcpy(s_palettePartTarget, &g_palette1[(144 + (subtitle->colour * 16)) * 3], 18); s_subtitleActive = true; GUI_DrawFilledRectangle(0, subtitle->top == 85 ? 0 : subtitle->top, SCREEN_WIDTH - 1, SCREEN_HEIGHT - 1, 0); if (g_enableVoices != 0 && s_feedback_base_index != 0xFFFF && s_houseAnimation_currentSubtitle != 0 && g_config.language == LANGUAGE_ENGLISH) { /* specific code for Intro * @see GameLoop_GameIntroAnimation() */ uint16 feedback_index = s_feedback_base_index + s_houseAnimation_currentSubtitle; Sound_Output_Feedback(feedback_index); if (g_feedback[feedback_index].messageId != 0) { /* force drawing of subtitle */ GameLoop_DrawText(String_Get_ByIndex(subtitle->stringID), subtitle->top); } } else { if (subtitle->stringID != STR_NULL) { GameLoop_DrawText(String_Get_ByIndex(subtitle->stringID), subtitle->top); } } s_palettePartDirection = PPD_TO_NEW_PALETTE; if (subtitle->paletteFadein != 0) { s_palettePartCount = subtitle->paletteFadein; for (i = 0; i < 18; i++) { s_palettePartChange[i] = s_palettePartTarget[i] / s_palettePartCount; if (s_palettePartChange[i] == 0) s_palettePartChange[i] = 1; } } else { memcpy(s_palettePartChange, s_palettePartTarget, 18); s_palettePartCount = 1; } if (g_playerHouseID != HOUSE_INVALID || s_houseAnimation_currentSubtitle != 2) return; GUI_DrawText_Wrapper(NULL, 0, 0, 0, 0, 0x21); GUI_DrawText_Wrapper("Copyright (c) 1992 Westwood Studios, Inc.", 160, 189, 215, 0, 0x112); g_fontCharOffset = 0; colors[0] = 0; for (i = 0; i < 6; i++) colors[i + 1] = 215 + i; GUI_InitColors(colors, 0, 15); Font_Select(g_fontIntro); }