diff --git a/include/extern.h b/include/extern.h index 3a0535cf0..9de55e169 100644 --- a/include/extern.h +++ b/include/extern.h @@ -753,7 +753,7 @@ E void NDECL(really_close); #ifdef DEBUG E boolean FDECL(showdebug, (const char *)); #endif -E void FDECL(read_tribute, (const char *,const char *,int)); +E boolean FDECL(read_tribute, (const char *,const char *,int)); /* ### fountain.c ### */ diff --git a/src/files.c b/src/files.c index 8e942f757..37af6e9c1 100644 --- a/src/files.c +++ b/src/files.c @@ -3331,13 +3331,17 @@ const char *filename; /* ---------- BEGIN TRIBUTE ----------- */ -/* 3.6 tribute code */ +/* 3.6 tribute code + * + * Returns TRUE if you were able to read something. + * + */ #define SECTIONSCOPE 1 #define TITLESCOPE 2 #define PASSAGESCOPE 3 -void +boolean read_tribute(tribsection, tribtitle, tribpassage) const char *tribsection, *tribtitle; int tribpassage; @@ -3351,12 +3355,13 @@ int tribpassage; const char *badtranslation = "an incomprehensible foreign translation"; boolean matchedsection = FALSE, matchedtitle = FALSE; winid tribwin = WIN_ERR; + boolean grasped = FALSE; /* check for mandatories */ if (!tribsection || !tribtitle) { pline("It's %s of \"%s\"!", badtranslation, tribtitle); - return; + return grasped; } debugpline3("read_tribute %s, %s, %d.", tribsection, tribtitle, tribpassage); @@ -3365,7 +3370,7 @@ int tribpassage; if (!fp) { /* this is actually an error - cannot open tribute file! */ pline("You feel too overwhelmed to continue!"); - return; + return grasped; } /* @@ -3465,13 +3470,13 @@ cleanup: display_nhwindow(tribwin, FALSE); destroy_nhwindow(tribwin); tribwin = WIN_ERR; - u.uconduct.literate++; + grasped = TRUE; } else { pline("It seems to be %s of \"%s\"!", badtranslation, tribtitle); } - return; + return grasped; } /* ---------- END TRIBUTE ----------- */ diff --git a/src/objects.c b/src/objects.c index d64649519..b4c26041a 100644 --- a/src/objects.c +++ b/src/objects.c @@ -829,7 +829,7 @@ SPELL("freeze sphere", "hardcover", P_MATTER_SPELL, 20, 2, 1, 1, NODIR, CLR SPELL("blank paper", "plain", P_NONE, 18, 0, 0, 0, 0, HI_PAPER), /* tribute book for 3.6 */ OBJECT(OBJ("novel", "paperback"), BITS(0,0,1,0,0,0,0,1,0,0,0,P_NONE,HI_PAPER), 0, - SPBOOK_CLASS, 0, 0, 0, 1, 0, 0, 0, 1, 20, CLR_BRIGHT_BLUE), + SPBOOK_CLASS, 0, 0, 0, 20, 0, 0, 0, 1, 20, CLR_BRIGHT_BLUE), /* a special, one of a kind, spellbook */ OBJECT(OBJ("Book of the Dead", "papyrus"), BITS(0,0,1,0,1,0,1,1,0,0,0,P_NONE,PAPER), 0, SPBOOK_CLASS, 0, 0,20, 10000, 0, 0, 0, 7, 20, HI_PAPER), diff --git a/src/spell.c b/src/spell.c index a9a9d7fb4..fe0741d2f 100644 --- a/src/spell.c +++ b/src/spell.c @@ -452,10 +452,12 @@ register struct obj *spellbook; /* 3.6.0 tribute */ if (booktype == SPE_NOVEL) { - /* Obtain current Terry Pratchett book - title for the current game. */ + /* Obtain current Terry Pratchett book title */ const char *tribtitle = noveltitle(&spellbook->novelidx); - read_tribute("books", tribtitle, 0); + if (read_tribute("books", tribtitle, 0)) { + u.uconduct.literate++; + check_unpaid(spellbook); + } return(1); }