X-Git-Url: https://plomlompom.com/repos/?a=blobdiff_plain;f=roguelike.c;h=002b875f9f78c7928c78956d898268dd010fa0c1;hb=a068b574ce8ac851be5ca1aefbaa487ef6c8e60e;hp=cd96364a9979221903bbc07ecf17f5e16fe568fd;hpb=a09638673d6c79fcf430299c63aab915e2ca19ba;p=plomrogue diff --git a/roguelike.c b/roguelike.c index cd96364..002b875 100644 --- a/roguelike.c +++ b/roguelike.c @@ -2,7 +2,6 @@ #include #include #include -#include #include "windows.h" struct Map { @@ -45,7 +44,7 @@ void draw_with_linebreaks (struct Win * win, char * text, int start_y) { toggle = 1; continue; } else - mvwaddch(win->curses_win, y, x, text[z]); + mvwaddch(win->curses, y, x, text[z]); if ('\n' == text[z+1]) { z++; toggle = 1; } @@ -58,12 +57,12 @@ void draw_text_from_bottom (struct Win * win, char * text) { char toggle = 0; int x, y, offset; int z = -1; - for (y = 0; 0 == toggle; y++) // Determine number of lines text would have in a window of - for (x = 0; x < win->width; x++) { // available width, but infinite height. + for (y = 0; 0 == toggle; y++) // Determine number of lines text would have in + for (x = 0; x < win->width; x++) { // a window of available width, but infinite height. z++; - if ('\n' == text[z]) // Treat \n and \0 as control characters for incrementing y and - break; // stopping the loop. Make sure they don't count as cell space - if ('\n' == text[z+1]) { // themselves. + if ('\n' == text[z]) // Treat \n and \0 as control characters for incrementing y and stopping + break; // the loop. Make sure they don't count as cell space themselves. + if ('\n' == text[z+1]) { z++; break; } else if (0 == text[z+1]) { @@ -103,9 +102,9 @@ void draw_map (struct Win * win) { for (x = 0; x < win->width; x++) { if (y < height_map_av && x < width_map_av) { if (z == (map.width * map.player_y) + map.player_x) - mvwaddch(win->curses_win, y, x, '@'); + mvwaddch(win->curses, y, x, '@'); else - mvwaddch(win->curses_win, y, x, cells[z]); + mvwaddch(win->curses, y, x, cells[z]); z++; } } } } void draw_info (struct Win * win) { @@ -118,7 +117,7 @@ void draw_info (struct Win * win) { void toggle_window (struct WinMeta * win_meta, struct Win * win) { // Toggle display of window win. - if (0 != win->curses_win) + if (0 != win->curses) suspend_window(win_meta, win); else append_window(win_meta, win); } @@ -146,7 +145,6 @@ void update_info (struct World * world) { // Update info data by incrementing turn value. world->turn++; } -//void update_log (struct Win * win, char * text) { void update_log (struct World * world, char * text) { // Update log with new text to be appended. char * new_text; @@ -237,11 +235,11 @@ void draw_keys_window (struct Win * win) { free(keyname); for (x = 0; x < win->width; x++) if (x < strlen(keydesc)) - mvwaddch(win->curses_win, y, x, keydesc[x] | attri); + mvwaddch(win->curses, y, x, keydesc[x] | attri); else if (strlen(keydesc) < x && x < strlen(keybindings[y + offset].name) + strlen(keydesc) + 1) - mvwaddch(win->curses_win, y, x, keybindings[y + offset].name[x - strlen(keydesc) - 1] | attri); + mvwaddch(win->curses, y, x, keybindings[y + offset].name[x - strlen(keydesc) - 1] | attri); else - mvwaddch(win->curses_win, y, x, ' ' | attri); } + mvwaddch(win->curses, y, x, ' ' | attri); } free(keydesc); } void init_keybindings(struct World * world) { @@ -256,43 +254,22 @@ void init_keybindings(struct World * world) { c = getc(file); if ('\n' == c) { if (c_count > linemax) - linemax = c_count; + linemax = c_count + 1; c_count = 0; lines++; } } struct KeyBinding * keybindings = malloc(lines * sizeof(struct KeyBinding)); fseek(file, 0, SEEK_SET); char * command = malloc(linemax); int commcount = 0; - char * digits = malloc(3); - int digicount = 0; - int key, digimax; - int keycount = 0; - c = getc(file); - while (EOF != c) { - if ('\n' == c) { - keybindings[keycount].name = calloc(commcount + 1, sizeof(char)); - memcpy(keybindings[keycount].name, command, commcount); - keybindings[keycount].key = key; - keycount++; - digicount = 0; - commcount = 0; } - else if (-1 != digicount) - if (' ' == c) { - key = 0; - digimax = digicount - 1; - while (digicount > 0) { - digicount--; - key = key + ((digits[digicount] - 48) * pow(10, digimax - digicount)); } - digicount = -1; } - else { - digits[digicount] = c; - digicount++; } - else { - command[commcount] = c; - commcount++; } - c = getc(file); } + char * cmdptr; + while (fgets(command, linemax, file)) { + keybindings[commcount].key = atoi(command); + cmdptr = strchr(command, ' ') + 1; + keybindings[commcount].name = malloc(strlen(cmdptr)); + memcpy(keybindings[commcount].name, cmdptr, strlen(cmdptr) - 1); + keybindings[commcount].name[strlen(cmdptr) - 1] = '\0'; + commcount++; } free(command); - free(digits); fclose(file); struct KeysWinData * keyswindata = malloc(sizeof(struct KeysWinData)); keyswindata->max = lines - 1;