diff options
Diffstat (limited to 'stone_soup/crawl-ref/source/overmap.cc')
-rw-r--r-- | stone_soup/crawl-ref/source/overmap.cc | 539 |
1 files changed, 0 insertions, 539 deletions
diff --git a/stone_soup/crawl-ref/source/overmap.cc b/stone_soup/crawl-ref/source/overmap.cc deleted file mode 100644 index e271a25fdf..0000000000 --- a/stone_soup/crawl-ref/source/overmap.cc +++ /dev/null @@ -1,539 +0,0 @@ -/* - * File: overmap.cc - * Idea: allow player to make notes about levels. I don't know how - * to do this (I expect it will require some kind of dynamic - * memory management thing). - LH - * Summary: Records location of stairs etc - * Written by: Linley Henzell - * - * Change History (most recent first): - * - * <3> 30/7/00 MV Made Over-map full-screen - * <2> 8/10/99 BCR Changed Linley's macros - * to an enum in overmap.h - * <1> 29/8/99 LRH Created - */ - -#include "AppHdr.h" -#include "overmap.h" - -#include <string.h> -#include <stdlib.h> -#include <stdio.h> - -#include "externs.h" - -// for #definitions of MAX_BRANCHES & MAX_LEVELS -#include "files.h" -// for #definitions of MAX_BRANCHES & MAX_LEVELS -#include "religion.h" -#include "stuff.h" -#include "view.h" - -enum -{ - NO_FEATURE = 0x00, - FEATURE_SHOP = 0x01, - FEATURE_LABYRINTH = 0x02, - FEATURE_HELL = 0x04, - FEATURE_ABYSS = 0x08, - FEATURE_PANDEMONIUM = 0x10 -}; - -// These variables need to become part of the player struct -// and need to be stored in the .sav file: - -// 0 == no altars; -// 100 == more than one altar; or -// # == which god for remaining numbers. - -FixedArray<unsigned char, MAX_LEVELS, MAX_BRANCHES> altars_present; -FixedVector<char, MAX_BRANCHES> stair_level; -FixedArray<unsigned char, MAX_LEVELS, MAX_BRANCHES> feature; - -int map_lines = 0; //mv: number of lines already printed on "over-map" screen - -//mv: prints one line in specified colour -// void print_one_map_line( const char *line, int colour ); -// void print_branch_entrance_line( const char *area ); - -void print_one_simple_line( const char *line, int colour ); -void print_one_highlighted_line( const char *pre, const char *text, - const char *post, int colour ); - -static void print_level_name( int branch, int depth, - bool &printed_branch, bool &printed_level ); - -void init_overmap( void ) -{ - for (int i = 0; i < MAX_LEVELS; i++) - { - for (int j = 0; j < MAX_BRANCHES; j++) - { - altars_present[i][j] = 0; - feature[i][j] = 0; - } - } - - for (int i = 0; i < MAX_BRANCHES; i++) - stair_level[i] = -1; -} // end init_overmap() - -void display_overmap( void ) -{ -#ifdef DOS_TERM - char buffer[4800]; - - window(1, 1, 80, 25); - gettext(1, 1, 80, 25, buffer); -#endif - - //mv: must be set to 0 so "More..." message appears really at the - // bottom of the screen - //Don't forget it could be changed since the last call of display_overmap - map_lines = 0; - - clrscr(); - bool pr_lev = false; - bool output = false; - - print_one_simple_line(" Overview of the Dungeon", WHITE); - - // This is a more sensible order than the order of the enums -- bwr - const int list_order[] = - { - BRANCH_MAIN_DUNGEON, - BRANCH_ECUMENICAL_TEMPLE, - BRANCH_ORCISH_MINES, BRANCH_ELVEN_HALLS, - BRANCH_LAIR, BRANCH_SWAMP, BRANCH_SLIME_PITS, BRANCH_SNAKE_PIT, - BRANCH_HIVE, - BRANCH_VAULTS, BRANCH_HALL_OF_BLADES, BRANCH_CRYPT, BRANCH_TOMB, - BRANCH_VESTIBULE_OF_HELL, - BRANCH_DIS, BRANCH_GEHENNA, BRANCH_COCYTUS, BRANCH_TARTARUS, - BRANCH_HALL_OF_ZOT - }; - - for (unsigned int index = 0; index < sizeof(list_order) / sizeof(int); index++) - { - const int i = list_order[index]; - bool printed_branch = false; - - for (int j = 0; j < MAX_LEVELS; j++) - { - bool printed_level = false; - - if (altars_present[j][i] != 0) - { - print_level_name( i, j, printed_branch, printed_level ); - output = true; - - if (altars_present[j][i] == 100) - { - print_one_highlighted_line( " - some ", - "altars to the gods", ".", - WHITE ); - } - else - { - snprintf( info, INFO_SIZE, "altar to %s", - god_name( altars_present[j][i] ) ); - - print_one_highlighted_line( " - an ", info, ".", WHITE ); - } - } - - if ( (feature[j][i] & FEATURE_SHOP) ) - { - print_level_name( i, j, printed_branch, printed_level ); - - // print_one_simple_line(" - facilities for the purchase of goods.",LIGHTGREY); - - print_one_highlighted_line( " - facilities for the ", - "purchase of goods", ".", LIGHTGREEN ); - output = true; - } - - if ( (feature[j][i] & FEATURE_ABYSS) ) - { - print_level_name( i, j, printed_branch, printed_level ); - // print_one_simple_line(" - a gateway into the Abyss.", LIGHTRED); - print_one_highlighted_line( " - a gateway into ", - "the Abyss", ".", MAGENTA ); - output = true; - } - - if ( (feature[j][i] & FEATURE_PANDEMONIUM) ) - { - print_level_name( i, j, printed_branch, printed_level ); - // print_one_simple_line(" - a link to Pandemonium.", LIGHTRED); - - print_one_highlighted_line( " - a link to ", "Pandemonium", - ".", LIGHTBLUE ); - output = true; - } - - if ( (feature[j][i] & FEATURE_HELL) ) - { - print_level_name( i, j, printed_branch, printed_level ); - // print_one_simple_line(" - a mouth of Hell.", LIGHTRED); - print_one_highlighted_line( " - a mouth of ", "Hell", ".", RED ); - output = true; - } - - if ( (feature[j][i] & FEATURE_LABYRINTH) ) - { - print_level_name( i, j, printed_branch, printed_level ); - // print_one_simple_line(" - the entrance of a Labyrinth.", LIGHTRED); - print_one_highlighted_line( " - an entrance to ", - "a Labyrinth", ".", CYAN ); - output = true; - } - - - // NB: k starts at 1 because there aren't any staircases - // to the main dungeon - for (int k = 1; k < MAX_BRANCHES; k++) - { - pr_lev = false; - // strcpy(info, " - a staircase leading to "); - info[0] = '\0'; - - if (stair_level[k] == j) - { - switch (i) - { - case BRANCH_LAIR: - switch (k) - { - case BRANCH_SLIME_PITS: - strcat(info, "the Slime Pits"); - pr_lev = true; - break; - case BRANCH_SNAKE_PIT: - strcat(info, "the Snake Pit"); - pr_lev = true; - break; - case BRANCH_SWAMP: - strcat(info, "the Swamp"); - pr_lev = true; - break; - } - break; - - case BRANCH_VAULTS: - switch (k) - { - case BRANCH_HALL_OF_BLADES: - strcat(info, "the Hall of Blades"); - pr_lev = true; - break; - case BRANCH_CRYPT: - strcat(info, "the Crypt"); - pr_lev = true; - break; - } - break; - - case BRANCH_CRYPT: - switch (k) - { - case BRANCH_TOMB: - strcat(info, "the Tomb"); - pr_lev = true; - break; - } - break; - - case BRANCH_ORCISH_MINES: - switch (k) - { - case BRANCH_ELVEN_HALLS: - strcat(info, "the Elven Halls"); - pr_lev = true; - break; - } - break; - - case BRANCH_MAIN_DUNGEON: - switch (k) - { - case BRANCH_ORCISH_MINES: - strcat(info, "the Orcish Mines"); - pr_lev = true; - break; - case BRANCH_HIVE: - strcat(info, "the Hive"); - pr_lev = true; - break; - case BRANCH_LAIR: - strcat(info, "the Lair"); - pr_lev = true; - break; - case BRANCH_VAULTS: - strcat(info, "the Vaults"); - pr_lev = true; - break; - case BRANCH_HALL_OF_ZOT: - strcat(info, "the Hall of Zot"); - pr_lev = true; - break; - case BRANCH_ECUMENICAL_TEMPLE: - strcat(info, "the Ecumenical Temple"); - pr_lev = true; - break; - } - break; - } - } - - if (pr_lev) - { - print_level_name( i, j, printed_branch, printed_level ); - print_one_highlighted_line( " - the entrance to ", info, - ".", YELLOW ); - output = true; - } - } - } - } - - textcolor( LIGHTGREY ); - - if (!output) - cprintf( EOL "You have yet to discover anything worth noting." EOL ); - - getch(); - - redraw_screen(); - -#ifdef DOS_TERM - puttext(1, 1, 80, 25, buffer); -#endif -} // end display_overmap() - - -static void print_level_name( int branch, int depth, - bool &printed_branch, bool &printed_level ) -{ - if (!printed_branch) - { - printed_branch = true; - - print_one_simple_line( "", YELLOW ); - print_one_simple_line( - (branch == BRANCH_MAIN_DUNGEON) ? "Main Dungeon" : - (branch == BRANCH_ORCISH_MINES) ? "The Orcish Mines" : - (branch == BRANCH_HIVE) ? "The Hive" : - (branch == BRANCH_LAIR) ? "The Lair" : - (branch == BRANCH_SLIME_PITS) ? "The Slime Pits" : - (branch == BRANCH_VAULTS) ? "The Vaults" : - (branch == BRANCH_CRYPT) ? "The Crypt" : - (branch == BRANCH_HALL_OF_BLADES) ? "The Hall of Blades" : - (branch == BRANCH_HALL_OF_ZOT) ? "The Hall of Zot" : - (branch == BRANCH_ECUMENICAL_TEMPLE) ? "The Ecumenical Temple" : - (branch == BRANCH_SNAKE_PIT) ? "The Snake Pit" : - (branch == BRANCH_ELVEN_HALLS) ? "The Elven Halls" : - (branch == BRANCH_TOMB) ? "The Tomb" : - (branch == BRANCH_SWAMP) ? "The Swamp" : - - (branch == BRANCH_DIS) ? "The Iron City of Dis" : - (branch == BRANCH_GEHENNA) ? "Gehenna" : - (branch == BRANCH_VESTIBULE_OF_HELL) ? "The Vestibule of Hell" : - (branch == BRANCH_COCYTUS) ? "Cocytus" : - (branch == BRANCH_TARTARUS) ? "Tartarus" - : "Unknown Area", - - YELLOW ); - } - - if (!printed_level) - { - printed_level = true; - - if (branch == BRANCH_ECUMENICAL_TEMPLE - || branch == BRANCH_HALL_OF_BLADES - || branch == BRANCH_VESTIBULE_OF_HELL) - { - // these areas only have one level... let's save the space - return; - } - - // we need our own buffer in here (info is used): - char buff[ INFO_SIZE ] = "\0";; - - if (branch == BRANCH_MAIN_DUNGEON) - depth += 1; - else if (branch >= BRANCH_ORCISH_MINES && branch <= BRANCH_SWAMP) - depth -= you.branch_stairs[ branch - BRANCH_ORCISH_MINES ]; - else // branch is in hell (all of which start at depth 28) - depth -= 26; - - snprintf( buff, INFO_SIZE, " Level %d:", depth ); - print_one_simple_line( buff, LIGHTRED ); - } -} - -void seen_staircase( unsigned char which_staircase ) -{ - // which_staircase holds the grid value of the stair, must be converted - // Only handles stairs, not gates or arches - // Don't worry about: - // - stairs returning to dungeon - predictable - // - entrances to the hells - always in vestibule - - unsigned char which_branch = BRANCH_MAIN_DUNGEON; - - switch ( which_staircase ) - { - case DNGN_ENTER_ORCISH_MINES: - which_branch = BRANCH_ORCISH_MINES; - break; - case DNGN_ENTER_HIVE: - which_branch = BRANCH_HIVE; - break; - case DNGN_ENTER_LAIR: - which_branch = BRANCH_LAIR; - break; - case DNGN_ENTER_SLIME_PITS: - which_branch = BRANCH_SLIME_PITS; - break; - case DNGN_ENTER_VAULTS: - which_branch = BRANCH_VAULTS; - break; - case DNGN_ENTER_CRYPT: - which_branch = BRANCH_CRYPT; - break; - case DNGN_ENTER_HALL_OF_BLADES: - which_branch = BRANCH_HALL_OF_BLADES; - break; - case DNGN_ENTER_ZOT: - which_branch = BRANCH_HALL_OF_ZOT; - break; - case DNGN_ENTER_TEMPLE: - which_branch = BRANCH_ECUMENICAL_TEMPLE; - break; - case DNGN_ENTER_SNAKE_PIT: - which_branch = BRANCH_SNAKE_PIT; - break; - case DNGN_ENTER_ELVEN_HALLS: - which_branch = BRANCH_ELVEN_HALLS; - break; - case DNGN_ENTER_TOMB: - which_branch = BRANCH_TOMB; - break; - case DNGN_ENTER_SWAMP: - which_branch = BRANCH_SWAMP; - break; - default: - exit(-1); // shouldn't happen - } - - stair_level[which_branch] = you.your_level; -} // end seen_staircase() - - -// if player has seen an altar; record it -void seen_altar( unsigned char which_altar ) -{ - // can't record in abyss or pan. - if ( you.level_type != LEVEL_DUNGEON ) - return; - - // portable; no point in recording - if ( which_altar == GOD_NEMELEX_XOBEH ) - return; - - // already seen - if ( altars_present[you.your_level][you.where_are_you] == which_altar ) - return; - - if ( altars_present[you.your_level][you.where_are_you] == 0 ) - altars_present[you.your_level][you.where_are_you] = which_altar; - else - altars_present[you.your_level][you.where_are_you] = 100; -} // end seen_altar() - - -// if player has seen any other thing; record it -void seen_other_thing( unsigned char which_thing ) -{ - if ( you.level_type != LEVEL_DUNGEON ) // can't record in abyss or pan. - return; - - switch ( which_thing ) - { - case DNGN_ENTER_SHOP: - feature[you.your_level][you.where_are_you] |= FEATURE_SHOP; - break; - case DNGN_ENTER_LABYRINTH: - feature[you.your_level][you.where_are_you] |= FEATURE_LABYRINTH; - break; - case DNGN_ENTER_HELL: - feature[you.your_level][you.where_are_you] |= FEATURE_HELL; - break; - case DNGN_ENTER_ABYSS: - feature[you.your_level][you.where_are_you] |= FEATURE_ABYSS; - break; - case DNGN_ENTER_PANDEMONIUM: - feature[you.your_level][you.where_are_you] |= FEATURE_PANDEMONIUM; - break; - } -} // end seen_other_thing() - - -/* mv: this function prints one line at "Over-map screen" in specified colour. - * If map_lines = maximum number of lines (it means the screen is full) it - * prints "More..." message, read key, clear screen and after that prints new - * line - */ -void print_one_simple_line( const char *line , int colour) -{ - if (map_lines == (get_number_of_lines() - 2)) - { - textcolor( LIGHTGREY ); - cprintf(EOL); - cprintf("More..."); - getch(); - clrscr(); - map_lines = 0; - } - - textcolor( colour ); - cprintf( line ); - cprintf( EOL ); - - map_lines++; -} - -void print_one_highlighted_line( const char *pre, const char *text, - const char *post, int colour ) -{ - if (map_lines == (get_number_of_lines() - 2)) - { - textcolor( LIGHTGREY ); - cprintf(EOL); - cprintf("More..."); - getch(); - clrscr(); - map_lines = 0; - } - - if (pre[0] != '\0') - { - textcolor( LIGHTGREY ); - cprintf( pre ); - } - - textcolor( colour ); - cprintf( text ); - - if (post[0] != '\0') - { - textcolor( LIGHTGREY ); - cprintf( post ); - } - - cprintf( EOL ); - - map_lines++; -} |