OpenCores
URL https://opencores.org/ocsvn/ion/ion/trunk

Subversion Repositories ion

[/] [ion/] [trunk/] [src/] [adventure/] [score.c] - Rev 191

Go to most recent revision | Compare with Previous | Blame | View Log

#include "misc.h"
#include "main.h"
#include "share.h"
 
#define TRUE  (0==0)
#define FALSE (0!=0)
 
/*
 * SCORING AND WRAP-UP
 */
 
void score(MODE)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
 *                                       TOTAL:   430
 *  POINTS CAN ALSO BE DEDUCTED FOR USING HINTS OR TOO MANY TURNS, OR FOR
 *  SAVING INTERMEDIATE POSITIONS. */
 
L20000: 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. */
 
	/* 20010 */ for (I=50; I<=MAXTRS; I++) {
	if(PTEXT[I] == 0) goto L20010;
	K=12;
	if(I == CHEST)K=14;
	if(I > CHEST)K=16;
	if(PROP[I] >= 0)SCORE=SCORE+2;
	if(PLACE[I] == 3 && PROP[I] == 0)SCORE=SCORE+K-2;
	MXSCOR=MXSCOR+K;
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). */
 
	SCORE=SCORE+(MAXDIE-NUMDIE)*10;
	MXSCOR=MXSCOR+MAXDIE*10;
	if(MODE == 0)SCORE=SCORE+4;
	MXSCOR=MXSCOR+4;
	if(DFLAG != 0)SCORE=SCORE+25;
	MXSCOR=MXSCOR+25;
	if(CLOSNG)SCORE=SCORE+25;
	MXSCOR=MXSCOR+25;
	if(!CLOSED) goto L20020;
	if(BONUS == 0)SCORE=SCORE+10;
	if(BONUS == 135)SCORE=SCORE+25;
	if(BONUS == 134)SCORE=SCORE+30;
	if(BONUS == 133)SCORE=SCORE+45;
L20020: MXSCOR=MXSCOR+45;
 
/*  DID HE COME TO WITT'S END AS HE SHOULD? */
 
	if(PLACE[MAGZIN] == 108)SCORE=SCORE+1;
	MXSCOR=MXSCOR+1;
 
/*  ROUND IT OFF. */
 
	SCORE=SCORE+2;
	MXSCOR=MXSCOR+2;
 
/*  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];
	} /* 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. */
 
	if(MODE < 0) return;
 
/*  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++) {
	if(CVAL[I] >= SCORE) goto L20210;
L20200: /*etc*/ ;
	} /* end loop */
	SPK=265;
	 goto L25000;
 
L20210: SPEAK(CTEXT[I]);
	SPK=264;
	if(I >= CLSSES) goto L25000;
	I=CVAL[I]+1-SCORE;
	SETPRM(1,I,I);
	SPK=263;
L25000: RSPEAK(SPK);
	exit(FALSE);
 
}
 

Go to most recent revision | Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.