/* * Copyright (C) 2002-2007 The Warp Rogue Team * Part of the Warp Rogue Project * * This software is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License. * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY. * * See the license.txt file for more details. */ /* * Module Name: Ui * Description: - */ /* * Misc. stuff */ #define Uses_Util #define Uses_Game #define Uses_Stats #define Uses_Macro #define Uses_World #define Uses_DataFile #define Uses_Inventory #define Uses_Honour #define Uses_Scenario #include "mheader.h" #include "ui.h" #define FILE_DIFFICULTY_INFO "modes.txt" static void render_dialogue_screen_active_window(DIALOGUE_STATE *); static void render_dialogue_screen_passive_window(DIALOGUE_STATE *); /* * renders the title screen of the game */ void render_game_title_screen(const char *warning_message) { SCREEN_COORD row, col; COLOUR c; render_secondary_screen(""); c = C_METAL; row = SEC_SCREEN_MIN_Y + 1; col = SEC_SCREEN_MIN_X + 9; render_text_at(c,row++,col," _ _ _ _______ ______ _____ ______ _____ ______ _ _ _______"); render_text_at(c,row++,col," | | | |_____| |_____/ |_____] |_____/ | | | ____ | | |______"); render_text_at(c,row++,col," |__|__| | | | \\_ | | \\_ |_____| |_____| |_____| |______"); c = C_BLOOD; render_text_at(c,row++,col," "); render_text_at(c,row++,col," "); render_text_at(c,row++,col," "); render_text_at(c,row++,col," / \\ /\\/\\/ \\ "); render_text_at(c,row++,col," / \\/\\ / \\ "); render_text_at(c,row++,col," / \\/ ) "); render_text_at(c,row++,col," ( / /\\ /\\ \\ / "); render_text_at(c,row++,col," \\ / / \\ / \\ \\ / "); render_text_at(c,row++,col," \\/ /____\\ /____\\ \\/ "); render_text_at(c,row++,col," / \\ "); render_text_at(c,row++,col," / \\ "); render_text_at(c,row++,col," / /\\ \\ "); render_text_at(c,row++,col," / / \\ \\ "); render_text_at(c,row++,col," / /____\\ \\ "); render_text_at(c,row++,col," <_________. ._________> "); render_text_at(c,row++,col," / | | | | |\\ \\ "); render_text_at(c,row++,col," / /| | | | | \\ \\ "); render_text_at(c,row++,col," / / | | | | | \\ \\ "); render_text_at(c,row++,col," /__\\ | | | | | /__\\ "); render_text_at(c,row++,col," | | | "); render_text_at(c,row++,col," | "); row = SEC_SCREEN_MIN_Y + 11; col = SEC_SCREEN_MAX_X - 30; render_text_at(C_FIELD_NAME, row, col + 20, "Scenario:"); render_text_at(C_FIELD_VALUE, ++row, col + 9, "%20s", scenario_name()); render_text_at(C_FIELD_VALUE, ++row, col + 24, "%5s", scenario_version()); row = SEC_SCREEN_MAX_Y - 2; col = SEC_SCREEN_MIN_X + 32; render_text_at(C_METAL, row - 1, col + 8, "Version %s", ENGINE_VERSION); render_text_at(C_METAL, ++row, col, ENGINE_WEBSITE); if (warning_message == NULL) { return; } render_text_at(C_WARNING, SEC_SCREEN_TITLE_ROW, SEC_SCREEN_MIN_X, warning_message ); } /* * game title screen menu */ COMMAND game_title_screen_menu(MENU *menu) { SCREEN_AREA menu_area = { SEC_SCREEN_MIN_Y + 11, MENU_AUTO, SEC_SCREEN_MIN_X + 2, MENU_AUTO }; menu_set_appearance(menu, &menu_area); return menu_execute(menu, &menu_area); } /* * new game dialogue */ void new_game_dialogue(CONFIRMATION_DIALOGUE *dialogue) { standard_confirmation_dialogue(dialogue, SEC_SCREEN_TITLE_ROW, SEC_SCREEN_MIN_X ); } /* * renders the game choose difficulty screen */ void render_game_choose_difficulty_screen(void) { char difficulty_info[TEXT_BUFFER_SIZE]; render_secondary_screen("-== Choose Difficulty ==-"); read_text_file(difficulty_info, DIR_HELP, FILE_DIFFICULTY_INFO); render_long_text(C_TEXT, SEC_SCREEN_MIN_Y, SEC_SCREEN_MIN_X, difficulty_info, SEC_SCREEN_MAX_X ); } /* * game choose difficulty screen menu */ COMMAND game_choose_difficulty_screen_menu(MENU *menu) { SCREEN_AREA menu_area = { SEC_SCREEN_MIN_Y + 5, MENU_AUTO, SEC_SCREEN_MIN_X, MENU_AUTO }; menu_set_appearance(menu, &menu_area); return menu_execute(menu, &menu_area); } /* * renders the world generation screen */ void render_world_generation_screen(bool generation_finished) { const char *generation_message = "The program will now generate the game world. " \ "This might take a while. "; render_secondary_screen("-== World Generation ==-"); render_long_text(C_TEXT, SEC_SCREEN_MIN_Y, SEC_SCREEN_MIN_X, generation_message, SEC_SCREEN_MAX_X ); render_text_at(C_TEXT, SEC_SCREEN_MIN_Y + 4, SEC_SCREEN_MIN_X, "Generating world, please wait... " ); if (generation_finished) { render_text(C_TEXT, "Finished!"); } } /* * renders the shop screen */ void render_shop_screen(const CHARACTER *character) { MONEY personal_funds; render_secondary_screen("-== Choose Object ==-"); personal_funds = inventory_money(character); render_text_at(C_TEXT, SEC_SCREEN_MAX_Y - 1, SEC_SCREEN_MIN_X, "Personal funds: %dc", personal_funds ); } /* * shop screen menu */ COMMAND shop_screen_menu(MENU *menu) { SCREEN_AREA menu_area = { SEC_SCREEN_MIN_Y, SEC_SCREEN_MAX_Y - 3, SEC_SCREEN_MIN_X, MENU_AUTO }; menu_set_appearance(menu, &menu_area); return menu_execute(menu, &menu_area); } /* * renders the dialogue screen */ void render_dialogue_screen(DIALOGUE_STATE *dialogue) { render_background(); render_dialogue_screen_passive_window(dialogue); render_dialogue_screen_active_window(dialogue); render_command_bar(SID_SECONDARY); } /* * renders the passive window of the dialogue screen */ static void render_dialogue_screen_passive_window(DIALOGUE_STATE *dialogue) { clear_text_window(SEC_SCREEN_TITLE_ROW, SEC_SCREEN_MIN_X, SEC_SCREEN_TITLE_ROW, SEC_SCREEN_MAX_X); render_text_at(C_TEXT, SEC_SCREEN_TITLE_ROW, SEC_SCREEN_MIN_X, dialogue->passive_character->name); clear_text_window( SEC_SCREEN_MIN_Y, SEC_SCREEN_MIN_X, SEC_SCREEN_MAX_Y / 2, SEC_SCREEN_MAX_X ); place_cursor_at(SEC_SCREEN_MIN_Y, SEC_SCREEN_MIN_X); render_long_text(C_TEXT, SEC_SCREEN_MIN_Y, SEC_SCREEN_MIN_X, dialogue->text, SEC_SCREEN_MAX_X ); } /* * renders the active window of the dialogue screen */ static void render_dialogue_screen_active_window(DIALOGUE_STATE *dialogue) { NOT_USED(dialogue); clear_text_window( SEC_SCREEN_MAX_Y / 2 + 2, SEC_SCREEN_MIN_X, SEC_SCREEN_MAX_Y, SEC_SCREEN_MAX_X ); } /* * dialogue screen menu */ COMMAND dialogue_screen_menu(MENU *menu) { SCREEN_AREA menu_area = {SEC_SCREEN_MAX_Y / 2 + 2, MENU_AUTO, SEC_SCREEN_MIN_X, MENU_AUTO}; menu_set_appearance(menu, &menu_area); return menu_execute(menu, &menu_area); } /* * renders the certificate of honour screen */ void render_certificate_screen(void) { render_secondary_screen("-== Certificate of Honour ==-"); render_text_at(C_TEXT, SEC_SCREEN_MIN_Y, SEC_SCREEN_MIN_X, "Certificate of Honour written to %s.", FILE_CERTIFICATE ); }