00001 #include "crogue.h"
00002
00003 static void init_file_prefix(const char *prefix);
00004 static void handle_args(int argc, char **argv);
00005
00006
00007 int main(int argc, char **argv)
00008 {
00009 init_file_prefix(argv[0]);
00010 handle_args(argc, argv);
00011 initialize();
00012 eventloop();
00013 return 0;
00014 }
00015
00016 char *file_prefix;
00017
00018 static void init_file_prefix(const char *prefix)
00019 {
00020 int ii, jj;
00021
00022 for(ii=strlen(prefix)-1; ii>=0; ii--) {
00023 if(prefix[ii] == '/' || prefix[ii] == '\\')
00024 break;
00025 }
00026
00027 file_prefix = (char*)malloc_throw(ii+1);
00028 for(jj=0; jj<=ii; jj++)
00029 file_prefix[jj] = prefix[jj];
00030 file_prefix[jj] = '\0';
00031 }
00032
00033
00034
00035 static void handle_args(int argc, char **argv)
00036 {
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053
00054
00055
00056
00057
00058
00059 }
00060
00061
00062
00063 const char *asciistart[24] =
00064 {
00065 " +--------------------------------------------------------------------------+ ",
00066 " | ######## ##### | ",
00067 " | ####### ##### | ",
00068 " | ####### ############### ##### | ",
00069 " | ###### ###################### ##### | ",
00070 " | ##### ######## # # # ###### ##### | ",
00071 " | ###### ####### CalcRogue ########### ##### | ",
00072 " | ##### ####### by Jim Babcock ##### #### | ",
00073 " | ###### ###### ####+## ############# ##### | ",
00074 " | ###### ###### #.....# # ##### ##### | ",
00075 " | ###### ############..V.T# # } ##### ##### | ",
00076 " | ###### ###### +.D...# # ###### ##### | ",
00077 " | ###### ############.W..@# # ##### ##### | ",
00078 " | ###### ###### #####-####+########## ##### | ",
00079 " | ###### ###### # ... + ###### ###### | ",
00080 " | ###### ###### ############################## | ",
00081 " | ###### ######## ############## | ",
00082 " | ###### ###################### ######## | ",
00083 " | ####### ################## #### | ",
00084 " | ######## ########### ### | ",
00085 " | ######## ##### | ",
00086 " | ########## ####### | ",
00087 " +--------------------------------------------------------------------------+ ",
00088 " "
00089 };
00090
00091
00092 const char *asciicolors[24] = {
00093 " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ",
00094 " B ######## ##### B ",
00095 " B ####### ##### B ",
00096 " B ####### ############### ##### B ",
00097 " B ###### ###################### ##### B ",
00098 " B ##### ########uuuuuuuuuuu###### ##### B ",
00099 " B ###### #######uWWWWWWWWWuuuuuu###### ##### B ",
00100 " B ##### #######uuuuWWWWWWWWWWWWWWu##### #### B ",
00101 " B ###### ######uuuuuuuuuuuuuuuuuuuuu##### ##### B ",
00102 " B ###### ######uuuuuuuuuuuuuuuuuuuuuu##### ##### B ",
00103 " B ###### ######uuuuuuuuuuuuuuuuuuuuuuu#### ##### B ",
00104 " B ###### ######uuuuuuuuuuuuuuuuuuuuuu###### ##### B ",
00105 " B ###### ######uuuuuuuuuuuuuuuuuuuuuu##### ##### B ",
00106 " B ###### ######uuuuuuuuuuuuuuuuuuuuuu#### ##### B ",
00107 " B ###### ######uuuuuuuuuuuuuuuuuuuu###### ###### B ",
00108 " B ###### ######uuuuuuuuuuuuuuuuuu############### B ",
00109 " B ###### ########uuuuuuuuuuuuuu############## B ",
00110 " B ###### ###################### ######## B ",
00111 " B ####### ################## #### B ",
00112 " B ######## ########### ### B ",
00113 " B ######## ##### B ",
00114 " B ########## ####### B ",
00115 " BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB ",
00116 " "
00117 };
00118
00119
00120
00121 void display_title_screen(void)
00122 {
00123 int ii, jj, color;
00124 for(ii=0; ii<24; ii++)
00125 for(jj=0; jj<80; jj++)
00126 {
00127 switch(toupper(asciicolors[ii][jj])) {
00128 case 'Y': color = YELLOW; break;
00129 case 'U': color = BLUE; break;
00130 case 'R': color = RED; break;
00131 case 'B': color = BLACK; break;
00132 default: color = WHITE; break;
00133 }
00134 attroff(COLOR_PAIR(DEFAULT_COLOR));
00135 if(isupper(asciicolors[ii][jj]))
00136 attron(A_BOLD);
00137 attron(COLOR_PAIR(color+1));
00138 mvaddch(ii, jj, asciistart[ii][jj]);
00139 attroff(COLOR_PAIR(color+1));
00140 if(isupper(asciicolors[ii][jj]))
00141 attroff(A_BOLD);
00142 }
00143 attron(A_BOLD);
00144 mvaddstr(20, 50, CROGUE_VERSION);
00145 attroff(A_BOLD);
00146 }
00147
00148
00149 void init_layout(void)
00150 {
00151 uint tilefield_top, tilefield_bottom;
00152 uint tilefield_height;
00153 uint tilefield_width;
00154 uint tile_size;
00155 uint status_pos;
00156 const char *tileset;
00157
00158 tileset = tiles;
00159 tile_size = 1;
00160
00161 status_pos = SCREEN_HEIGHT - 2;
00162 tilefield_top = 2;
00163 tilefield_bottom = status_pos - 1;
00164 tilefield_height = tilefield_bottom-tilefield_top;
00165
00166 tilefield_width = SCREEN_WIDTH/tile_size;
00167
00168 UI_Status_Place(status_pos, tilefield_height + tilefield_top);
00169
00170 UI_TF_Place(
00171 COORD(0, tilefield_top),
00172 COORD(tilefield_width, tilefield_height/tile_size),
00173 tileset,
00174 tile_size, tile_size
00175 );
00176 }
00177
00178
00179
00180 void sys_init(void)
00181 {
00182 (void)initscr();
00183 if(has_colors())
00184 {
00185 if(start_color() == ERR)
00186 panic("Error initializing color.");
00187 init_pair(1, COLOR_BLACK, COLOR_BLACK);
00188 init_pair(2, COLOR_RED, COLOR_BLACK);
00189 init_pair(3, COLOR_GREEN, COLOR_BLACK);
00190 init_pair(4, COLOR_YELLOW, COLOR_BLACK);
00191 init_pair(5, COLOR_BLUE, COLOR_BLACK);
00192 init_pair(6, COLOR_MAGENTA, COLOR_BLACK);
00193 init_pair(7, COLOR_CYAN, COLOR_BLACK);
00194 init_pair(8, COLOR_WHITE, COLOR_BLACK);
00195 }
00196 if(attron(COLOR_PAIR(DEFAULT_COLOR)) == ERR)
00197 panic("attron() returned ERR");
00198 if(attroff(A_BOLD) == ERR)
00199 panic("attroff() returned ERR");
00200 noecho();
00201 cbreak();
00202 if(notimeout(stdscr, TRUE) == ERR)
00203 panic("notimeout() returned ERR");
00204 if(keypad(stdscr, TRUE) == ERR)
00205 panic("keypad() returned ERR");
00206 # ifdef USE_NCURSES
00207 ESCDELAY=0;
00208 # endif
00209 }
00210
00211
00212 void sys_init_data_file(void)
00213 {
00214 FILE *constfile;
00215
00216
00217 constfile = fopen(retprintf("%s%s", file_prefix, DATAFILENAME_PC), "rb");
00218 if(!constfile)
00219 panic("Couldn't open constant data file.");
00220
00221
00222
00223
00224 w->constfileoffset = debug_malloc(65536);
00225 (void)fread(w->constfileoffset, 65536, 1, constfile);
00226 memcpy(&w->desc, w->constfileoffset, sizeof(struct world_descriptor));
00227 fclose(constfile);
00228
00229 link_data_file();
00230 }
00231
00232
00233 void sys_cleanup(void)
00234 {
00235 if(w && w->constfileoffset)
00236 free(w->constfileoffset);
00237 clrscr();
00238 move(0, 0);
00239 endwin();
00240 }
00241
00242
00243
00244 int curses_title_screen(void)
00245 {
00246 int choice;
00247 clrscr();
00248
00249 display_title_screen();
00250
00251 do {
00252 choice = read_char();
00253 } while(choice < 'a' || choice > 'e');
00254 choice -= 'a';
00255 return choice;
00256 }
00257
00258