SUBROUTINE CHOOSE(FROZEN) C*BEGIN COMMON COMMON SNAP,SNAPSHT(247), + DATE,REMKL,REMCOM,REMBASE,REMRES,REMTIME,STARKL,BASEKL, + KILLK,KILLC,GALAXY(8,8),CX(10),CY(10),BASEQX(5),BASEQY(5), + NEWSTUF(8,8),PLNETS(10,5),ISX,ISY,NSCREM,NROMKL,NROMREM, + NSCKILL,NPLANKL,ISATB,BATX,BATY,THINGX,THINGY, + QUAD(10,10),KX(20),KY(20),KPOWER(20),KDIST(20),KSTUF(20), + FUTURE(10),MESSAGE(5,10), + INKLING,INBASE,INRESOR,INCOM,INTIME,INSTAR,INENRG,INSHLD, + INTORPS,INLSR,INDATE,ENERGY,SHLD,SHLDUP,CONDIT,TORPS,SHIP, + QUADX,QUADY,SECTX,SECTY,WARPFAC,WFACSQ,LSUPRES,DAMAGE(20), + LENGTH,SKILL,PASSWD,DIST,DIREC,TIME,BASEX,BASEY,DOCKFAC, + KLHERE,COMHERE,CASUAL,NHELP,NKINKS,STARCH(8,8), + DEVICE(2,14),IDIDIT,GAMEWON,ALIVE,JUSTIN,RESTING,ALLDONE, + DAMFAC,SHLDCHG,NDEVICE,PLNETX,PLNETY,INORBIT,LANDED,IPLANET, + IMINE,ICRYSTL,INPLAN,NENHERE,ISHERE,NEUTZ,IRHERE,ICRAFT, + IENTESC,ISCRAFT,ISCATE,CRYPROB,ICITE,IPHWHO, + CRACKS(12) INTEGER SHLDUP,CONDIT,QUADX,QUADY,SECTX,SECTY,TORPS, + REMKL,REMBASE,SKILL,REMCOM,GALAXY,STARCH,CX,CY, + SHIP,ALLDONE,BASEQX,BASEQY,BASEX,BASEY,GAMEWON, + ALIVE,STARKL,BASEKL,CASUAL,COMHERE,RESTING,SNAP,SHLDCHG, + THINGX,THINGY,BATX,BATY,PLNETX,PLNETY,PLNETS REAL KDIST,KPOWER,LSUPRES,INTIME,INRESOR,INDATE,INSHLD, + INENRG,INLSR BYTE QUAD REAL*8 DEVICE,PASSWD C*END COMMON LOGICAL*1 IHS,IHR,IHC,IHK,IHE,IHF,IHBLANK,IHDOT,IHP,IHB 1 ,IHSTAR,IHT,IHQUEST,IHNUM COMMON/HOLLER/IHEOL,IHREAL,IHALPHA,IHS,IHR,IHC,IHK,IHGREEN,IHRED, +IHYELLO,IHDOCKD,IHE,IHF,IHBLANK,IHDOT,IHQUEST,IHP,IHSTAR,IHB +,IHT,IHNUM COMMON/SCANBF/KEY,AITEM LOGICAL FROZEN REAL*8 AITEM,REGULAR,TOURNAMENT,FROZN,SHORT,MEDIUM,LONG 1 ,NOVICE,FAIR,GOOD,EMERITUS,EXPERT,RHBLANK EQUIVALENCE (AITEM,TNUMBER) DATA REGULAR,TOURNAMENT,FROZN/7HREGULAR,8HTOURNAME,6HFROZEN/ DATA SHORT,MEDIUM,LONG/5HSHORT,6HMEDIUM,4HLONG/ DATA NOVICE,FAIR,GOOD,EXPERT/6HNOVICE,4HFAIR,4HGOOD,6HEXPERT/ DATA EMERITUS,RHBLANK/8HEMERITUS,1H / TNUMBER = 0. PASSWD = RHBLANK ALLDONE=0 GAMEWON=0 SEED=SECNDS(0.) CALL RANSET(SEED) IPHWHO=0 5 FROZEN = .FALSE. C--------ASK FOR PARAMETERS OF GAME, PREFERABLY ALL ON ONE LINE CALL PROMPT( +54HWOULD YOU LIKE A REGULAR, TOURNAMENT, OR FROZEN GAME? ,54) CALL SCAN IF(CROP(AITEM,REGULAR)) GO TO 9 IF(CROP(AITEM,TOURNAMENT)) GO TO 100 IF(CROP(AITEM,FROZN)) GO TO 200 GO TO 5 9 SKILL=0 LENGTH=0 10 CALL SCAN IF(KEY .NE. IHALPHA) GO TO 20 C--------CHECK FOR DIFFERENT KINDS OF GAMES IF(CROP(AITEM,SHORT)) LENGTH=1 IF(CROP(AITEM,MEDIUM)) LENGTH=2 IF(CROP(AITEM,LONG)) LENGTH=4 IF(CROP(AITEM,NOVICE)) SKILL=1 IF(CROP(AITEM,FAIR)) SKILL=2 IF(CROP(AITEM,GOOD)) SKILL=3 IF(CROP(AITEM,EXPERT)) SKILL=4 IF(CROP(AITEM,EMERITUS)) SKILL=5 KSTUF(5)=IDIM(SKILL,3) IF(LENGTH*SKILL .EQ. 0) GO TO 10 GO TO 30 20 IF(LENGTH .NE. 0) GO TO 25 CALL PROMPT(45HWOULD YOU LIKE A SHORT, MEDIUM OR LONG GAME? ,45) GO TO 10 25 IF(SKILL .NE. 0) GO TO 30 CALL PROMPT(48HARE YOU NOVICE, FAIR, GOOD, EXPERT OR EMERITUS? 1 ,48) GO TO 10 C--------READ IN SECRET PASSWORD 30 CALL SCAN PASSWD=AITEM IF(KEY .NE. IHEOL) GO TO 40 CALL PROMPT(33HPLEASE TYPE IN A SECRET PASSWORD:,33) GO TO 30 40 CONTINUE C--------USE PARAMETERS TO GENERATE INITIAL VALUES OF THINGS DAMFAC=0.50*SKILL REMBASE=3.0*RANF(0)+2.0 INPLAN=5. +6.*RANF(0) NROMREM=(2.+RANF(0))*SKILL NSCREM=SKILL/3 REMTIME=7.0*LENGTH INTIME=REMTIME RATE=(SKILL-2.0*RANF(0)+1.0)*SKILL*0.1 + 0.15 REMKL=2.0*RATE*INTIME INKLING=REMKL INCOM=SKILL+0.0625*INKLING*RANF(0) INCOM=MIN0(10,INCOM) REMCOM=INCOM REMRES=(INKLING+4* INCOM )*INTIME INRESOR=REMRES IF(INKLING.GT.50) REMBASE=REMBASE+1 INBASE=REMBASE RETURN C--------PROCESS A TOURNAMENT REQUEST 100 CALL SCAN CALL RANSET(ABS(TNUMBER)) THINGX=-1 C--------GO BACK FOR ANYTHING LEFT OUT IF (KEY.NE.IHEOL) GO TO 9 CALL PROMPT(37HTYPE IN NAME OR NUMBER OF TOURNAMENT: ,37) GO TO 100 C--------PROCESS A REQUEST FOR A FROZEN GAME 200 CALL THAW C--------MAKE SURE WE GOT A GAME OUT OF THAW IF(PASSWD.EQ.0.D0) GO TO 5 FROZEN = .TRUE. C--------DESTROY ANY "THINGS" IN FROZEN GAME. THINGX=0 THINGY=0 DO 210 I=1,10 DO 210 J=1,10 210 IF(QUAD(I,J) .EQ. IHQUEST) QUAD(I,J)=IHDOT C--------RESET PLAQUE STATUS ICITE=0 RETURN END