X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=main.c;h=198a4ccb55868c4505fd9dfb8252392bd0fcd664;hp=6f154c1821cbd6f184abbf44cec24238a444882e;hb=d5d6a3e02d344ed4097a38f54ccf6757e627a1f6;hpb=0fbd79b608bf8b481e079b98130c392a5c594776 diff --git a/main.c b/main.c index 6f154c1..198a4cc 100644 --- a/main.c +++ b/main.c @@ -11,6 +11,10 @@ * ESR apologizes for the remaing gotos (now confined to one function * in this file - there used to be over 350 of them, *everywhere*). * Applying the Structured Program Theorem can be hard. + * + * Copyright (c) 1977, 2005 by Will Crowther and Don Woods + * Copyright (c) 2017 by Eric S. Raymond + * SPDX-License-Identifier: BSD-2-clause */ #include @@ -85,7 +89,6 @@ int main(int argc, char *argv[]) fprintf(stderr, "advent: can't open save file %s for read\n", optarg); - signal(SIGINT, sig_handler); break; #endif default: @@ -461,6 +464,8 @@ static bool dwarfmove(void) static void croak(void) /* Okay, he's dead. Let's get on with it. */ { + if (game.numdie < 0) + game.numdie = 0; const char* query = obituaries[game.numdie].query; const char* yes_response = obituaries[game.numdie].yes_response; ++game.numdie; @@ -693,14 +698,16 @@ static void playermove( int motion) * to get it out. Having dropped it, go back and * pretend he wasn't carrying it after all. */ drop(EMERALD, game.loc); - int te_tmp = travel_entry; - do { - if (travel[te_tmp].stop) - BUG(CONDITIONAL_TRAVEL_ENTRY_WITH_NO_ALTERATION); // LCOV_EXCL_LINE - ++te_tmp; - } while - (traveleq(travel_entry, te_tmp)); - travel_entry = te_tmp; + { + int te_tmp = travel_entry; + do { + if (travel[te_tmp].stop) + BUG(CONDITIONAL_TRAVEL_ENTRY_WITH_NO_ALTERATION); // LCOV_EXCL_LINE + ++te_tmp; + } while + (traveleq(travel_entry, te_tmp)); + travel_entry = te_tmp; + } continue; /* goto L12 */ case 3: /* Special travel 3. Troll bridge. Must be done @@ -1082,10 +1089,10 @@ Lclearobj: #ifdef BROKEN /* Handling of actionless object followed by objectless action */ - if (preserve.type1 == OBJECT && preserve.type2 == NO_WORD_TYPE && command.id2 == 0) + if (preserve.word[0].type == OBJECT && preserve.word[1].type == NO_WORD_TYPE && command.word[1].id == 0 && command.word[0].id == CARRY) command.obj = preserve.obj; -#endif - +#endif /* BROKEN */ + ++game.turns; if (closecheck()) { @@ -1172,10 +1179,13 @@ Lookup: command.verb = command.word[0].id; break; case NUMERIC: // LCOV_EXCL_LINE + if (!settings.oldstyle) { + sspeak(DONT_KNOW, command.word[0].raw); + goto Lclearobj; + } default: // LCOV_EXCL_LINE BUG(VOCABULARY_TYPE_N_OVER_1000_NOT_BETWEEN_0_AND_3); // LCOV_EXCL_LINE } - switch (action(command)) { case GO_TERMINATE: return true;