X-Git-Url: https://jxself.org/git/?p=open-adventure.git;a=blobdiff_plain;f=score.c;h=31994c20c36da0bb0759ffe1748ef439f91033f6;hp=acda23f8f6d32da7a9a7cb12b8b77e922871ad87;hb=43aef9ceb16d0e2821c5ee81ea9d7c2f7ace84bb;hpb=24d7aeaf8a1dc13034884044139728045604fc37 diff --git a/score.c b/score.c index acda23f..31994c2 100644 --- a/score.c +++ b/score.c @@ -1,41 +1,38 @@ -#include "misc.h" -#include "main.h" -#include "share.h" - -#define TRUE (0==0) -#define FALSE (0!=0) +#include +#include "advent.h" +#include "database.h" /* - * SCORING AND WRAP-UP + * scoring and wrap-up */ -void score(MODE)long MODE; { +void score(long MODE) { /* <0 if scoring, >0 if quitting, =0 if died or won */ -/* THE PRESENT SCORING ALGORITHM IS AS FOLLOWS: - * OBJECTIVE: POINTS: PRESENT TOTAL POSSIBLE: - * GETTING WELL INTO CAVE 25 25 - * EACH TREASURE < CHEST 12 60 - * TREASURE CHEST ITSELF 14 14 - * EACH TREASURE > CHEST 16 224 - * SURVIVING (MAX-NUM)*10 30 - * NOT QUITTING 4 4 - * REACHING "CLOSNG" 25 25 - * "CLOSED": QUIT/KILLED 10 - * KLUTZED 25 - * WRONG WAY 30 - * SUCCESS 45 45 - * CAME TO WITT'S END 1 1 - * ROUND OUT THE TOTAL 2 2 +/* The present scoring algorithm is as follows: + * Objective: Points: Present total possible: + * Getting well into cave 25 25 + * Each treasure < chest 12 60 + * Treasure chest itself 14 14 + * Each treasure > chest 16 224 + * Surviving (MAX-NUM)*10 30 + * Not quitting 4 4 + * Reaching "CLOSNG" 25 25 + * "Closed": Quit/Killed 10 + * Klutzed 25 + * Wrong way 30 + * Success 45 45 + * Came to Witt's End 1 1 + * Round out the total 2 2 * TOTAL: 430 - * POINTS CAN ALSO BE DEDUCTED FOR USING HINTS OR TOO MANY TURNS, OR FOR - * SAVING INTERMEDIATE POSITIONS. */ + * Points can also be deducted for using hints or too many turns, or for + * saving intermediate positions. */ -L20000: SCORE=0; + SCORE=0; MXSCOR=0; -/* FIRST TALLY UP THE TREASURES. MUST BE IN BUILDING AND NOT BROKEN. - * GIVE THE POOR GUY 2 POINTS JUST FOR FINDING EACH TREASURE. */ +/* First tally up the treasures. Must be in building and not broken. + * Give the poor guy 2 points just for finding each treasure. */ /* 20010 */ for (I=50; I<=MAXTRS; I++) { if(PTEXT[I] == 0) goto L20010; @@ -48,12 +45,12 @@ L20000: SCORE=0; L20010: /*etc*/ ; } /* end loop */ -/* NOW LOOK AT HOW HE FINISHED AND HOW FAR HE GOT. MAXDIE AND NUMDIE TELL US - * HOW WELL HE SURVIVED. DFLAG WILL - * TELL US IF HE EVER GOT SUITABLY DEEP INTO THE CAVE. CLOSNG STILL INDICATES - * WHETHER HE REACHED THE ENDGAME. AND IF HE GOT AS FAR AS "CAVE CLOSED" - * (INDICATED BY "CLOSED"), THEN BONUS IS ZERO FOR MUNDANE EXITS OR 133, 134, - * 135 IF HE BLEW IT (SO TO SPEAK). */ +/* Now look at how he finished and how far he got. MAXDIE and NUMDIE tell us + * how well he survived. DFLAG will + * tell us if he ever got suitably deep into the cave. CLOSNG still indicates + * whether he reached the endgame. And if he got as far as "cave closed" + * (indicated by "CLOSED"), then bonus is zero for mundane exits or 133, 134, + * 135 if he blew it (so to speak). */ SCORE=SCORE+(MAXDIE-NUMDIE)*10; MXSCOR=MXSCOR+MAXDIE*10; @@ -70,39 +67,39 @@ L20010: /*etc*/ ; if(BONUS == 133)SCORE=SCORE+45; L20020: MXSCOR=MXSCOR+45; -/* DID HE COME TO WITT'S END AS HE SHOULD? */ +/* Did he come to Witt's End as he should? */ if(PLACE[MAGZIN] == 108)SCORE=SCORE+1; MXSCOR=MXSCOR+1; -/* ROUND IT OFF. */ +/* Round it off. */ SCORE=SCORE+2; MXSCOR=MXSCOR+2; -/* DEDUCT FOR HINTS/TURNS/SAVES. HINTS < 4 ARE SPECIAL; SEE DATABASE DESC. */ +/* Deduct for hints/turns/saves. Hints < 4 are special; see database desc. */ - /* 20030 */ for (I=1; I<=HNTMAX; I++) { -L20030: if(HINTED[I])SCORE=SCORE-HINTS[I][2]; + for (I=1; I<=HNTMAX; I++) { + if(HINTED[I])SCORE=SCORE-HINTS[I][2]; } /* end loop */ if(NOVICE)SCORE=SCORE-5; if(CLSHNT)SCORE=SCORE-10; SCORE=SCORE-TRNLUZ-SAVED; -/* RETURN TO SCORE COMMAND IF THAT'S WHERE WE CAME FROM. */ +/* Return to score command if that's where we came from. */ if(MODE < 0) return; -/* THAT SHOULD BE GOOD ENOUGH. LET'S TELL HIM ALL ABOUT IT. */ +/* that should be good enough. Let's tell him all about it. */ if(SCORE+TRNLUZ+1 >= MXSCOR && TRNLUZ != 0)RSPEAK(242); if(SCORE+SAVED+1 >= MXSCOR && SAVED != 0)RSPEAK(143); SETPRM(1,SCORE,MXSCOR); SETPRM(3,TURNS,TURNS); RSPEAK(262); - /* 20200 */ for (I=1; I<=CLSSES; I++) { + for (I=1; I<=CLSSES; I++) { if(CVAL[I] >= SCORE) goto L20210; -L20200: /*etc*/ ; + /*etc*/ ; } /* end loop */ SPK=265; goto L25000; @@ -114,6 +111,6 @@ L20210: SPEAK(CTEXT[I]); SETPRM(1,I,I); SPK=263; L25000: RSPEAK(SPK); - exit(FALSE); + exit(0); }