From b5c73d1fc419d4d3b41513f00e2d2ea12b53d030 Mon Sep 17 00:00:00 2001 From: DTB Date: Sat, 25 Nov 2023 09:26:33 -0700 Subject: [PATCH] make flow not suck --- rogue/play.c | 319 +++++++++++++++++---------------------------------- 1 file changed, 107 insertions(+), 212 deletions(-) diff --git a/rogue/play.c b/rogue/play.c index 7d3c8ac..65481b1 100644 --- a/rogue/play.c +++ b/rogue/play.c @@ -55,237 +55,132 @@ play_level(void) { short ch; int count; + enum { NORMAL, COUNTED, CHECK } state; + state = NORMAL; - for (;;) { - interrupted = 0; - if (hit_message[0]) { - messagef(1, "%s", hit_message); - hit_message[0] = 0; + for(;;){ + switch(state){ + case NORMAL: + interrupted = 0; + if (hit_message[0]){ + messagef(1, "%s", hit_message); + hit_message[0] = 0; + } + if(trap_door){ + trap_door = 0; + return; + } + move(rogue.row, rogue.col); + refresh(); + ch = rgetchar(); + case CHECK: + check_message(); + count = 0; } - if (trap_door) { - trap_door = 0; - return; - } - move(rogue.row, rogue.col); - refresh(); - - ch = rgetchar(); -CMCH: - check_message(); - count = 0; -CH: - switch(ch) { - case '.': - rest((count > 0) ? count : 1); - break; - case 's': - search(((count > 0) ? count : 1), 0); - break; - case 'i': - inventory(&rogue.pack, ALL_OBJECTS); - break; - case 'f': - fight(0); - break; - case 'F': - fight(1); - break; - case 'h': - case 'j': - case 'k': - case 'l': - case 'y': - case 'u': - case 'n': - case 'b': + state = NORMAL; + switch(ch){ + case '.': rest((count > 0) ? count : 1); break; + case 's': search(((count > 0) ? count : 1), 0); break; + case 'i': inventory(&rogue.pack, ALL_OBJECTS); break; + case 'f': fight(0); break; + case 'F': fight(1); break; + case 'h': case 'j': case 'k': case 'l': case 'y': case 'u': + case 'n': case 'b': (void)one_move_rogue(ch, 1); break; - case 'H': - case 'J': - case 'K': - case 'L': - case 'B': - case 'Y': - case 'U': - case 'N': - case '\010': - case '\012': - case '\013': - case '\014': - case '\031': - case '\025': - case '\016': - case '\002': - multiple_move_rogue(ch); - break; - case 'e': - eat(); - break; - case 'q': - quaff(); - break; - case 'r': - read_scroll(); - break; - case 'm': - move_onto(); - break; - case ',': - kick_into_pack(); - break; - case 'd': - drop(); - break; - case 'P': - put_on_ring(); - break; - case 'R': - remove_ring(); - break; + case 'H': case 'J': case 'K': case 'L': case 'Y': case 'U': + case 'N': case 'B': case '\010': case '\012': case '\013': + case '\014': case '\031': case '\025': case '\016': + case '\002': multiple_move_rogue(ch); break; + case 'e': eat(); break; + case 'q': quaff(); break; + case 'r': read_scroll(); break; + case 'm': move_onto(); break; + case ',': kick_into_pack(); break; + case 'd': drop(); break; + case 'P': put_on_ring(); break; + case 'R': remove_ring(); break; case '\020': do { remessage(count++); ch = rgetchar(); } while (ch == '\020'); - goto CMCH; + state = CHECK; break; - case '\027': - wizardize(); - break; - case '>': - if (drop_check()) { - return; - } - break; - case '<': - if (check_up()) { - return; - } - break; - case ')': - case ']': + case '\027': wizardize(); break; + case '>': if(drop_check()) + return; + break; + case '<': if(check_up()) + return; + break; + case ')': case ']': inv_armor_weapon(ch == ')'); break; - case '=': - inv_rings(); - break; - case '^': - id_trap(); - break; - case '/': - id_type(); - break; - case '?': - id_com(); - break; - case '!': - do_shell(); - break; - case 'o': - edit_opts(); - break; - case 'I': - single_inv(0); - break; - case 'T': - take_off(); - break; - case 'W': - wear(); - break; - case 'w': - wield(); - break; - case 'c': - call_it(); - break; - case 'z': - zapp(); - break; - case 't': - throw(); - break; + case '=': inv_rings(); break; + case '^': id_trap(); break; + case '/': id_type(); break; + case '?': id_com(); break; + case '!': do_shell(); break; + case 'o': edit_opts(); break; + case 'I': single_inv(0); break; + case 'T': take_off(); break; + case 'W': wear(); break; + case 'w': wield(); break; + case 'c': call_it(); break; + case 'z': zapp(); break; + case 't': throw(); break; case 'v': - messagef(0, "rogue-clone: Version III. (Tim Stoehr was here), tektronix!zeus!tims"); + messagef(0, "rogue-clone: Version III (trinity mod)." + " (Tim Stoehr was here), tektronix!zeus!tims"); break; - case 'Q': - quit(0); - __unreachable(); - case '0': - case '1': - case '2': - case '3': - case '4': - case '5': - case '6': - case '7': - case '8': - case '9': + case 'Q': quit(0); + case '0': case '1': case '2': case '3': case '4': case '5': + case '6': case '7': case '8': case '9': move(rogue.row, rogue.col); refresh(); - do { - if (count < 100) { + do{ + if(count < 100) count = (10 * count) + (ch - '0'); - } ch = rgetchar(); - } while (is_digit(ch)); - if (ch != CANCEL) { - goto CH; - } - break; - case ' ': - break; - case '\011': - if (wizard) { - inventory(&level_objects, ALL_OBJECTS); - } else { - messagef(0, "%s", unknown_command); - } - break; - case '\023': - if (wizard) { - draw_magic_map(); - } else { - messagef(0, "%s", unknown_command); - } - break; - case '\024': - if (wizard) { - show_traps(); - } else { - messagef(0, "%s", unknown_command); - } - break; - case '\017': - if (wizard) { - show_objects(); - } else { - messagef(0, "%s", unknown_command); - } - break; - case '\001': - show_average_hp(); - break; - case '\003': - if (wizard) { - c_object_for_wizard(); - } else { - messagef(0, "%s", unknown_command); - } - break; - case '\015': - if (wizard) { - show_monsters(); - } else { - messagef(0, "%s", unknown_command); - } - break; - case 'S': - save_game(); - break; - default: - messagef(0, "%s", unknown_command); + }while (is_digit(ch)); + if(ch != CANCEL) + state = COUNTED; break; + case ' ': break; + case '\011': if(!wizard){ + messagef(0, "%s", unknown_command); + break; + } + inventory(&level_objects, ALL_OBJECTS); break; + case '\023': if(!wizard){ + messagef(0, "%s", unknown_command); + break; + } + draw_magic_map(); break; + case '\024': if(!wizard) + messagef(0, "%s", unknown_command); + break; + } + show_traps(); break; + case '\017': if(!wizard) + messagef(0, "%s", unknown_command); + break; + } + show_objects(); break; + case '\001': show_average_hp(); break; + case '\003': if(!wizard) + messagef(0, "%s", unknown_command); + break; + } + c_object_for_wizard(); break; + case '\015': if(!wizard) + messagef(0, "%s", unknown_command); + break; + } + show_monsters(); break; + case 'S': save_game(); break; + default: messagef(0, "%s", unknown_command); break; } } }